0

我有一个 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" %>

这会引发错误:

语法错误,意外的“<”,需要关键字_end

破坏红宝石块是我以前从未尝试过的事情。有什么想法吗?

4

1 回答 1

1

错误是因为content_for在 -

<!-- replace_contents "erb[silent]:contains('content_for :sidebar')" -->

content_for是 rails 中的一个辅助方法,它在内部存储一个标记块do.....end供以后使用。

erb[silent]:contains()deface 中的选择器适用于 ruby​​/rails 代码。

因此,当您'content_for :sidebar'在选择器内部编写时,它会发现do...end丢失并生成错误expecting keyword_end

例如,此代码不会引发任何错误 -

<!-- replace_contents "erb[silent]:contains('if @product.sold?')" -->

因为if @product.sold?是有效的 ruby​​/rails 代码。

于 2014-12-30T18:21:47.133 回答