Ruby数组到JSON和Rails JSON渲染
我有一个Ruby数组,如何在Rails 3.0中将其渲染为JSON视图?
我的控制器方法是
def autocomplete @question = Question.all end
def autocomplete @question = Question.all respond_to do |format| format.json { render :json => @question } end end
如果自动完成操作仅渲染JSON,则可以将re5et的解决方案简化为:
def autocomplete questions = Question.all render :json => questions end
(注意我复数’问题’反映它是一个数组并删除@符号 – 一个局部变量就足够了,因为你可能只用它来渲染内联JSON)
作为一个附录,因为我怀疑人们可能会在此页面上寻找jquery ui自动完成插件的解决方案,将数组question
呈现给JSON将无法正常工作。 该插件需要一个特定的格式,如下所述:
本地数据可以是一个简单的字符串数组,也可以包含数组中每个项目的对象,带有标签或值属性或两者。 label属性显示在建议菜单中。 用户从菜单中选择了某些内容后,该值将插入到input元素中。 如果仅指定了一个属性,则它将用于两者,例如。 如果仅提供value-properties,则该值也将用作标签。
使用String时,Autocomplete插件期望该字符串指向将返回JSON数据的URL资源。 它可以位于同一主机上,也可以位于不同的主机上(必须提供JSONP)。 请求参数“term”将添加到该URL。 数据本身可以与上述本地数据的格式相同。
换句话说,你的json应该看起来像这样(最简单的forms):
[{'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