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