我有一个erb块:
<% content_for :sidebar do %>
<% if defined? @products && defined? @taxon %>
<%= render :partial => "spree/shared/filters" %>
<% elsif defined? @taxonomies %>
<%= render :partial => "spree/shared/taxonomies" %>
<% end %>
<% end %>
我想在content_for块中放入不同的内容,所以我尝试将其破坏:
<!-- replace_contents "erb[silent]:contains('content_for :sidebar')" -->
<%= render partial: "test" %>
这会引发错误:
语法错误,意外&#39;&lt;&#;;期待keyword_end
破坏红宝石块是我以前从未尝试过的......有什么想法吗?
答案 0 :(得分:1)
错误是由于content_for
in -
<!-- replace_contents "erb[silent]:contains('content_for :sidebar')" -->
content_for
是rails中的一个辅助方法,它在do.....end
中存储一个标记块供以后使用。
和erb[silent]:contains()
选择器适用于ruby / rails代码。
因此,当您在选择器内编写'content_for :sidebar'
时,它会发现do...end
缺失并生成错误expecting keyword_end
例如,此代码不会引发任何错误 -
<!-- replace_contents "erb[silent]:contains('if @product.sold?')" -->
因为if @product.sold?
是有效的ruby / rails代码。