Ruby数组到JSON和Rails JSON渲染

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)


re5*_*5et 9

def autocomplete
     @question = Question.all
     respond_to do |format|
       format.json { render :json => @question }
     end
end
Run Code Online (Sandbox Code Playgroud)