【问题标题】:How to return multiple strings separated by a space in ruby on rails?如何在ruby on rails中返回由空格分隔的多个字符串?
【发布时间】:2013-07-17 05:57:38
【问题描述】:

我正在使用我的 application_helper.rb 文件中定义的以下视图助手:

def even_odd(index)
  if index.to_i % 2 == 0
    "left_border white"
  else
    "left_border"
  end
end

在我看来,有一个表需要灰白色模式的替代类:

<td class=<%= even_odd(index) %>> <%=investment.amount %> </td>

然而,这只会返回left_border,而不是left_border white。我做错了什么?

【问题讨论】:

  • index 来自哪里?您必须在每次迭代时将index 增加一,否则不会发生任何事情。但是,解决此问题的最佳方法是按照 Faisal 的建议使用 cycle
  • 索引来自 html 代码中的表,是的,它在每次迭代时递增

标签: ruby-on-rails ruby ruby-on-rails-3.2 erb helper


【解决方案1】:

Rails 有一个内置的 helper 用于此功能:

<tr class="left_border <%= cycle(' white', '') %>"></tr>

【讨论】:

  • 感谢您让我知道这一点,很好的答案。我不需要使用此方法提供视图助手。我现在知道的更多了。
【解决方案2】:

试试这个

<td class="<%= even_odd(index)%>"> <%=investment.amount %> </td>

【讨论】:

    【解决方案3】:

    试试这个

    def even_odd(index)
     ((index.to_i % 2) == 0 ? "left_border white" : "left_border" )
    end
    

    杀死多余的空间&lt;%=even_odd(index)%&gt;

    并将引号添加回您的班级&lt;td class="&lt;%=even_odd(index) %&gt;"&gt;

    【讨论】:

    • 为什么要杀死多余的空间?
    【解决方案4】:

    我稍微更新了你的方法,我使用三元运算符来减少代码行:-

    def even_odd(index)
      ((index.to_i%2 == 0) ? "left_border white" : "left_border")
    end
    

    我还想建议您在视图中为辅助方法使用插值:-

    <td class="<%= even_odd(index) %>"> <%=investment.amount %> </td>
    

    我对erb模板不太熟悉,我在haml模板中习惯了。顺便说一句,我更新了答案。

    【讨论】:

    • 字符串插值方法没有给出类名
    • 我对erb模板不太熟悉,在haml模板中习惯了。顺便说一句,我更新了答案。谢谢你纠正我。
    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 2017-10-05
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2020-08-07
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多