我试图将我的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>
有人可以帮助我理解为什么字符串插值在两种情况下都是错误的吗?我已经看了几个小时......
答案 0 :(得分:0)
您的HAML
语法看起来不错,但可能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
并且您只是提供表格的一个片段。
答案 1 :(得分:0)
我刚刚重访了这一点,并且发现了Deface(Spree使用)与Haml不兼容的事实。
因此,任何一个人都使用ERB并与之共存,或者完全禁用Deface并重写所有“污损”&#39;视图。
P.S。:为了禁用Deface,我在class X implements Runnable{
private int sharedVariable;
public X(int shared){
sharedVariable = shared;
}
public void run(){
. . .
}
}
public static void main(String args[]){
int shared = 5;
Thread t1 = new Thread(new X(shared));
Thread t2 = new Thread(new X(shared));
t1.start();
t2.start();
}
内向config.deface.enabled = false
,development.rb
和production.rb
添加了test.rb
。