【问题标题】:Ruby array to JSON and Rails JSON renderingRuby 数组到 JSON 和 Rails JSON 渲染
【发布时间】:2010-11-23 06:05:23
【问题描述】:

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

我的控制器方法是

def autocomplete
     @question = Question.all
end

【问题讨论】:

    标签: ruby-on-rails ruby json


    【解决方案1】:

    如果自动完成操作仅呈现 JSON,您可以将 re5et 的解决方案简化为:

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

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

    作为一种附录,因为我怀疑人们可能会登陆此页面以寻找 jquery ui 自动完成插件的解决方案,因此将数组 question 渲染为 JSON 将不起作用。该插件需要here描述的特定格式:

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

    使用字符串时,自动完成插件期望该字符串指向将返回 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
    

    【讨论】:

    • 感谢您的回答对我帮助很大!
    【解决方案2】:
    def autocomplete
         @question = Question.all
         respond_to do |format|
           format.json { render :json => @question }
         end
    end
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2011-05-18
    • 2014-11-14
    • 2011-03-28
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多