ruby-on-rails – 用轨道3输出格式化的json
发布时间:2020-12-17 01:44:39 所属栏目:百科 来源:网络整理
导读:我使用rails 3.0.3 javascript自动完成需要这样的数据 { query:'Li',suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'],data:['LR','LY','LI','LT']} 我的行动是 def autocomplete @query = params[:query] @customers = Custo
我使用rails 3.0.3
javascript自动完成需要这样的数据 { query:'Li',suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'],data:['LR','LY','LI','LT'] } 我的行动是 def autocomplete @query = params[:query] @customers = Customer.where('firstname like ?',"%#{@query}%") render :partial => "customers/autocomplete.json" end 我的观点是 { query:'<%= @query %>',suggestions: <%= raw @customers.map{|c| "#{c.firstname} #{c.lastname}" } %>,data: <%= raw @customers.to_json %> } 它返回 { query:'e',suggestions: ["customer 1","customer 2"],data: [1,3] } 它不起作用,因为建议/数据的数据应该在简单引用之间…… 我不能使用to_json方法,因为它将返回我的对象??的所有内容. 有什么建议吗? 干杯 解决方法
注意:这是过时的,Jbuilder是迄今为止更好的选择.
有两种方法可以解决这个问题.如果您只需要对象中的字段子集,则可以使用:only或:except以排除您不想要的内容. @customer.to_json(:only => [:id,:name]) 在您的示例中,您似乎需要以特定格式返回json,因此简单地序列化结果数组将不起作用.创建自定义json响应的最简单方法是使用Hash对象: render :json => { :query => 'e',:suggestions => @customers.collect(&:name),:data => @customers.collect(&:id) } 我已经尝试使用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 只是一些便利功能,让您的生活更轻松,您的控制器/视图更清洁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |