den*_*min 3 serialization json ruby-on-rails ruby-on-rails-3
我使用rails 3.0.3
javascript自动完成需要这样的数据
{
query:'Li',
suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'],
data:['LR','LY','LI','LT']
}
Run Code Online (Sandbox Code Playgroud)
我的行动是
def autocomplete
@query = params[:query]
@customers = Customer.where('firstname like ?', "%#{@query}%")
render :partial => "customers/autocomplete.json"
end
Run Code Online (Sandbox Code Playgroud)
我的观点是
{
query:'<%= @query %>',
suggestions: <%= raw @customers.map{|c| "#{c.firstname} #{c.lastname}" } %>,
data: <%= raw @customers.to_json %>
}
Run Code Online (Sandbox Code Playgroud)
它返回
{
query:'e',
suggestions: ["customer 1", "customer 2"],
data: [1, 3]
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为建议/数据的数据应该在简单引用之间......
我不能使用to_json方法,因为它将返回我的对象的所有内容.
有什么建议吗?
干杯
Ada*_*sek 10
注意:这是过时的,Jbuilder是一个更好的选择.
有两种方法可以解决这个问题.如果您只需要对象中的字段子集,则可以使用:only或:except排除您不想要的内容.
@customer.to_json(:only => [:id, :name])
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您似乎需要以特定格式返回json,因此简单地序列化结果数组将不起作用.创建自定义json响应的最简单方法是使用以下Hash对象:
render :json => {
:query => 'e',
:suggestions => @customers.collect(&:name),
:data => @customers.collect(&:id)
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用partials来构建json响应,但这并不像简单地使用Hash它那样有效.
将名字和姓氏格式化为单个字符串是您可能在视图中做很多事情的,我建议将其移动到一个函数:
class Customer < ActiveRecord::Base
...
def name
"#{first_name} #{last_name}"
end
def name=(n)
first_name, last_name = n.split(' ', 2)
end
end
Run Code Online (Sandbox Code Playgroud)
只是一些便利功能,让您的生活更轻松,您的控制器/视图更清洁.
| 归档时间: |
|
| 查看次数: |
5524 次 |
| 最近记录: |