试图js.erb文件中使用控制变量时NoMethodError抛出(NoMethodError th

2019-09-16 12:02发布

在我的资产,我有一个名为maps.js.erb ,基本上只有以下(调试)内容:

alert("<%= @map.width %>");

这个JS文件是通过加载show.html.erb属于地图视图。

<%= javascript_include_tag params[:controller] %>
<h1><%= @map.title %></h1>
…

HTML文件本身示出了地图的标题,例如,浏览时/maps/1/ ,由于@map在控制器定义。 但是,只要我包括JS文件,我得到以下错误:

NoMethodError在地图#秀

显示…/app/views/maps/show.html.erb其中线#1提出:

未定义的方法'标题'近亲:NilClass(在…/app/assets/javascripts/maps.js.erb

  • 为什么@map没有可用的js.erb文件?
  • 我还能如何访问我的控制器定义这个实例变量?

Answer 1:

瑞安贝茨做了有关该主题的一个截屏正确的 - 你可能想看看:

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 %>


Answer 2:

你不能有@ map.title在一个共同的js文件进行评估,因为生成的文件,并担任过一次,后来才控制器invokations,然后缓存。

但是,你可以在你的HTML页面的JavaScript。 的JavaScript可以通过<%= @ map.title%>提供的恒定值来生成。

把JavaScript的一个部分,并呈现在你的页面的标签。

我已经看到了美国银行在其网站上这样做。 它们产生在页面上的JavaScript数组中的所有账户交易。



Answer 3:

不要忘记使用escape_javascript()



文章来源: NoMethodError thrown when trying to use controller variables in js.erb file