Rails 在javascript中使用ruby对象
1.在javascript中使用ruby简单对象
如,需要将ruby对象转换成javascript的简单变量:
<%= javascript_tag do %>
url = '<%= j products_url %>';
<% end %>
此时的<%= %>是由引号包裹的。rails的j方法是为了正确地转义ruby对象从而嵌入javascript中。
2.在javascript中使用ruby复杂对象
公共桥梁显然是json,但要正确地转义json就需要raw方法:
<%= javascript_tag do %>
products = <%= raw Product.limit(10).to_json %>
<% end %>
此时<%= %>无引号包裹。
3.Gon gem
如果有大量的ruby对象需要在javascript中使用,这种方法就不好了。Gon就是为了解决这个问题。
首先在gemfile中添加gon:
gem 'gon'
然后在/app/views/layouts/application.html.erb文件中包含gon:
<head>
<title>Store</title>
<%= include_gon %>
<%= stylesheet_link_tag "application", media: "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tag %>
</head>
然后在controller中就可以以这种形式为javascript对象赋值:
gon.variable_name = variable_value
# or new syntax
gon.push({
:user_id => 1,
:user_role => "admin"
})
gon.push(any_object) # any_object with respond_to? :each_pair
例如:
class ProductsController < ApplicationController
def index
gon.products = Product.limit(10)
end
end
在js中获取变量的方法:
gon.variable_name
即:
go.products