Haml和Spree的字符串插值问题

时间:2016-06-30 23:46:53

标签: ruby-on-rails ruby haml 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>

有人可以帮助我理解为什么字符串插值在两种情况下都是错误的吗?我已经看了几个小时......

2 个答案:

答案 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 = falsedevelopment.rbproduction.rb添加了test.rb

相关问题