我有一个集合:
@products = Product.where("product_type = ?", 3)
我现在想创建一个javascript对象,这样我就可以在UI中执行查找,如:
my_products[2342]
它会返回:
"some_name"
我相信它应该是这样的:
var my_products = {
2342: "some_name",
5321: "there blah"
}
在我的控制器动作中生成这个的好方法是什么?
答案 0 :(得分:3)
ActiveRecord和Ruby通常有一个方法to_json
,可以帮助你做你想要的。
基本上构造要在Ruby中创建的数组,并调用to_json
来创建一个字符串,该字符串是一个有效的javascript对象。
答案 1 :(得分:1)
我建议使用to_json,但是如果你想要另一个选项,你可以使用js.erb模板生成js对象文字表示法。
<强>视图/产品/ products.js.erb 强>
var products = {
<% @products.each do |product| %>
<%= "#{product.id}: \"#{@product.name}\"," %>
<% end %>
}
然后,使用专用方法或responds_to块设置控制器方法。最后,让AJAX调用该方法并执行返回的代码,这将导致您可以访问js.erb模板中定义的产品变量。