我正在尝试以这种方式呈现集合
视图/消费者/家庭/ index.html.erb
<%= render @promotions %>
消费者/促销/ _promotion.html.erb
<% content_for :page_js_modules do %>
<%= javascript_include_tag 'consumer/carousels' %>
<% end %>
如果@promotions中有多个促销活动,_promotion.html.erb会被多次呈现,那么javascript标记也会被多次包含并导致问题。
我想将javascript标记放在促销视图中,以便使其模块化,因此任何人都可以使用它而不必担心包含相关的js标记。
答案 0 :(得分:2)
如果@promotions中有多个促销活动,_promotion.html.erb会被多次呈现,那么javascript标记也会被多次包含并导致问题。
这是部分用于重用相同代码的部分。 你不能使用(你可以,但这不是一个好习惯)部分内部的js标签,因为它会继续在集合中为每个记录的部分内容呈现内容。
我想将javascript标记放在促销视图中,以便使其模块化,因此任何人都可以使用它而不必担心包含相关的js标记。
我认为更好的方法是进行部分内部促销,其中包含您的js标记并呈现促销部分
#consumer/promotions/_promotion_with_js.html.erb
<% content_for :page_js_modules do %>
<%= javascript_include_tag 'consumer/carousels' %>
<% end %>
<%= render @promotions %>
如果还有其他用例需要包含js而不是促销部分,那么您可以随时将其分成另一部分并使用它。
答案 1 :(得分:0)
您可能希望在布局中包含该脚本标记,而不是部分内容。 Layouts是包含脚本和样式表的好地方。您只会进行一次呼叫,并且会缓存响应。最好只调用一次脚本并依赖该缓存,即使布局不必要地调用它。