【发布时间】:2010-11-23 06:05:23
【问题描述】:
我有一个 Ruby 数组,如何在 Rails 3.0 中将其呈现为 JSON 视图?
我的控制器方法是
def autocomplete
@question = Question.all
end
【问题讨论】:
标签: ruby-on-rails ruby json
我有一个 Ruby 数组,如何在 Rails 3.0 中将其呈现为 JSON 视图?
我的控制器方法是
def autocomplete
@question = Question.all
end
【问题讨论】:
标签: ruby-on-rails ruby json
如果自动完成操作仅呈现 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
【讨论】:
def autocomplete
@question = Question.all
respond_to do |format|
format.json { render :json => @question }
end
end
【讨论】: