【问题标题】:Using ruby variable for class name in HAML在 HAML 中使用 ruby​​ 变量作为类名
【发布时间】:2011-09-01 03:14:45
【问题描述】:

我有一段代码,我试图在 HAML 中使用变量作为类名。这里是:

      - data_table(@installation_requests, nil, {:placeholder => ''}) do |installation_request, css_class|
          %tr{:class => css_class}

我看不出有什么问题,RubyMine IDE 也没有选择错误,它认为这是对变量的合法使用。我收到以下错误:

odd number of arguments for Hash

谁能指出上面的代码有什么问题?

【问题讨论】:

  • 当你使用字符串文字而不是变量时,你会得到错误吗?
  • 尝试在css_class上拨打to_s
  • 是的,同样的错误。当我只是使用硬编码字符串而不是变量时,它可以工作..

标签: ruby-on-rails haml


【解决方案1】:

如果你尝试怎么办:

- data_table(@installation_requests, nil, {:placeholder => ''}) do |installation_request, css_class|
  %tr{:class => "#{css_class}"}

或者如果您将视图保存为 view.html.haml:

- data_table(@installation_requests, nil, {:placeholder => ''}) do |installation_request, css_class|
  <tr class="#{css_class}">
  ....stuff....
  </tr>

【讨论】:

    【解决方案2】:

    哈希实际上可以巧妙地将传递给它的数组传递给一系列键和值。

    例如:

    Hash["a", "apple", "b", "boy"]       #=> {"a"=>"apple", "b"=>"boy"}
    

    如果您将奇数个参数传递到键/值对中...

    Hash["a", "apple", "b", "boy", "c"]  #=> odd number of arguments for Hash
    

    所以,我很确定这发生在 data_table 方法的某个地方。所以,请检查一个数组是否在函数调用序列中的某个地方被 Hash!

    【讨论】:

    • 如果发生这种情况,那么调用 css_class.class 将返回 'Array',但它返回 'String'...
    • 您使用的是哪个版本的 Ruby 和 HAML?看到这个问题:github.com/nex3/haml/issues/388
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2014-03-16
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多