代码之家  ›  专栏  ›  技术社区  ›  Mithun Sreedharan Kuldeep Modi

Ruby数组到JSON和Rails JSON呈现

  •  4
  • Mithun Sreedharan Kuldeep Modi  · 技术社区  · 15 年前

    我有一个Ruby数组,如何在Rails3.0中将其呈现为JSON视图?

    我的控制器方法是

    def autocomplete
         @question = Question.all
    end
    
    2 回复  |  直到 12 年前
        1
  •  9
  •   re5et    15 年前
    def autocomplete
         @question = Question.all
         respond_to do |format|
           format.json { render :json => @question }
         end
    end
    
        2
  •  17
  •   Pierre    12 年前

    如果autocomplete操作仅呈现JSON,则可以将re5et的解决方案简化为:

    def autocomplete
      questions = Question.all
      render :json => questions
    end
    

    (请注意,我用复数形式“question”来表示它是一个数组,并删除了@符号-一个局部变量就足够了,因为您可能只使用它来呈现内联JSON)

    作为一种补充,因为我怀疑人们可能会登陆这个页面,寻找jquery ui自动完成插件的解决方案,呈现数组 question 对JSON不起作用。该插件需要指定的格式,如前所述 here :

    本地数据可以是一个简单的字符串数组,也可以包含数组中每个项的对象,可以是标签属性或值属性,也可以是二者兼而有之。标签属性显示在建议菜单中。用户从菜单中选择某个内容后,该值将插入到输入元素中。如果只指定了一个属性,则它将同时用于这两个属性,例如,如果只提供值属性,则该值也将用作标签。

    使用字符串时,autocomplete插件希望该字符串指向将返回JSON数据的URL资源。它可以在同一个主机上,也可以在不同的主机上(必须提供JSONP)。请求参数“term”被添加到该URL。数据本身的格式可以与上面描述的本地数据相同。

    换句话说,您的JSON应该是这样的(以最简单的形式):

    [{'value': "Option1"},{'value': "Option2"},{'value': "etc"}]
    

    您可以在Ruby中这样完成:

    def autocomplete
      questions = Question.all # <- not too useful
      questions.map! {|question| {:value => question.content}}
      render :json => questions
    end
    

    我没有测试过这个,因为我没有我的开发盒。几小时后我会确认。

    更新: 是的,行得通!

    更新2:

    新的Rails方法(在Rails 3.1中添加)是:

    class MyController < ApplicationController
      respond_to :json
      # ...
      def autocomplete
        questions = Question.all # <- not too useful
        questions.map! {|question| {value: question.content}}
        respond_with(questions)
      end
    end
    
    推荐文章