[英]Devise `user_signed_in?` inside `.js.erb` file `NoMethodError`
[英]NoMethodError thrown when trying to use controller variables in js.erb file
在我的资产中,我有一个名为maps.js.erb
的文件,基本上只有以下(调试)内容:
alert("<%= @map.width %>");
此JS文件通过属于maps的show.html.erb
视图加载。
<%= javascript_include_tag params[:controller] %>
<h1><%= @map.title %></h1>
…
HTML文件本身显示地图的标题,例如,当浏览到/maps/1/
,因为@map
是在控制器中定义的。 但是,只要我包含JS文件,我就会收到以下错误:
地图中的NoMethodError#show
显示
…/app/views/maps/show.html.erb
,其中第1行引发:nil的未定义方法'title':NilClass(在
…/app/assets/javascripts/maps.js.erb
)
@map
在js.erb
文件中不可用? Ryan Bates就该主题做了一个截屏视频 - 你可能想看看它:
http://railscasts.com/episodes/324-passing-data-to-javascript
在html.erb
文件中,您可以定义变量:
<%= javascript_tag do %>
window.productsURL = "<%=j products_url %>";
window.products = <%=raw Product.limit(10).to_json %>;
<% end %>
您不能在公共js文件中评估@ map.title,因为该文件是在控制器稍后调用之前生成并提供一次,然后进行缓存。
但是,您可以在HTML页面中使用javascript。 可以使用<%= @ map.title%>提供的常量值生成javascript。
将javascript放在一个部分中,然后将其呈现在页面中的标记中。
我见过美国银行在他们的网站上这样做。 它们在页面上的javascript数组中生成所有帐户事务。
不要忘记使用escape_javascript()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.