Mit*_*ran 5 ruby json ruby-on-rails
我有一个Ruby数组,如何在Rails 3.0中将其渲染为JSON视图?
我的控制器方法是
def autocomplete
@question = Question.all
end
Run Code Online (Sandbox Code Playgroud)
Pie*_*rre 18
如果自动完成操作仅呈现JSON,则可以将re5et的解决方案简化为:
def autocomplete
questions = Question.all
render :json => questions
end
Run Code Online (Sandbox Code Playgroud)
(注意我复数'问题'反映它是一个数组并删除了@符号 - 一个局部变量就足够了,因为你可能只用它来渲染内联JSON)
作为一个附录,因为我怀疑人们可能会在此页面上寻找jquery ui autocomplete插件的解决方案,将数组呈现question为JSON将无法正常工作.该插件需要特定的格式描述在这里:
本地数据可以是一个简单的字符串数组,也可以包含数组中每个项目的对象,带有标签或值属性或两者.label属性显示在建议菜单中.用户从菜单中选择了某些内容后,该值将插入到input元素中.如果仅指定了一个属性,则它将用于两者,例如.如果仅提供value-properties,则该值也将用作标签.
使用String时,Autocomplete插件希望该字符串指向将返回JSON数据的URL资源.它可以位于同一主机上,也可以位于不同的主机上(必须提供JSONP).请求参数"term"将添加到该URL.数据本身可以与上述本地数据的格式相同.
换句话说,你的json应该看起来像这样(最简单的形式):
[{'value': "Option1"},{'value': "Option2"},{'value': "etc"}]
Run Code Online (Sandbox Code Playgroud)
你可以这样在ruby中完成这个:
def autocomplete
questions = Question.all # <- not too useful
questions.map! {|question| {:value => question.content}}
render :json => questions
end
Run Code Online (Sandbox Code Playgroud)
我没有测试过这个,因为我没有方便的开发盒.我会在几个小时后确认.
更新: 是的,有效!
更新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
Run Code Online (Sandbox Code Playgroud)
def autocomplete
@question = Question.all
respond_to do |format|
format.json { render :json => @question }
end
end
Run Code Online (Sandbox Code Playgroud)