[英]String interpolation trouble with Haml and Spree
我正在尝试将Spree商店转换为Haml,而且后端的某些部分也遇到了麻烦。 例如,我采用以下Haml代码:
- @orders.each do |order|
%tr{:class => "state-#{order.state.downcase} #{cycle('odd', 'even')}"}
%tr{:class => "state-#{order.state.downcase}"}
这是输出HTML(简化为单个迭代):
<tr class="state-#order.state.downcase"></tr>
<tr></tr>
有人可以帮助我理解为什么两种情况下字符串插值都是错误的吗? 我已经看了好几个小时了...
您的HAML
语法看起来不错,但可能是cycle
导致麻烦和无声地失败。 Cycle是ActionView::Helpers::TextHelper
的RAILs方法,因此既然您删除了Spree
,也许您的代码不再包含该库。
如果这是问题的根源,则可以包括ActionView帮助器,也可以不cycle
而重写代码,如下所示:
%table
%tbody
- @orders.each_with_index do |order,index|
%tr{:class => "state-#{order.state.downcase} #{%w(even odd)[index%2]}"}
%td{:class => "state-#{order.state.downcase}"}
#{order.state}
PS-我假设您的示例代码中的第二个tr
应该是td
,而您只是提供表的一部分。
我刚刚重新审视了这一点,并发现Deface(由Spree使用)与Haml不兼容。
因此,要么使用ERB并使用它,要么完全禁用Deface并重写所有“损坏的”视图。
PS:为了禁用Deface,我在config/environments/
中将development.rb
, production.rb
和test.rb
添加了config.deface.enabled = false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.