带有污点的狂欢 - 使用deface替换块的内容

时间:2014-12-30 16:22:43

标签: ruby-on-rails spree deface

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

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

1 个答案:

答案 0 :(得分:1)

错误是由于content_for in -

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

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

dep中的

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代码。