Noob on Rails - 需要帮助改进方法

时间:2014-07-06 03:21:59

标签: ruby-on-rails

我正在使用"选择"帮助器迭代嵌套数组以在我的表单上显示options属性。

目前我所拥有的是:

  def smtp_delays
    [['5 seconds', 5], ['10 seconds', 10], ['15 seconds', 15], ['30 seconds', 30], ['60 seconds', 60]]
  end

以下是我的表格如何通过它:

<%= ff.select(:smtp_delay, @test.settings.smtp_delays, {class: 'form-control'}) %>

我页面上的输出结果如下:

<option value="5">5 seconds</option>
<option value="10">10 seconds</option>
<option value="15">15 seconds</option>
<option value="30">30 seconds</option>
<option value="60">60 seconds</option>

有没有更有效的方法来处理这个过程?就像,如果我想添加另一个条目,我确信这比添加另一个条目更有效["45 seconds", 45]

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

这可能会为你缩短一点

[5, 10, 15, 30, 45].map { |s| ["%d seconds" % s, s] }

输出

#=> [["5 seconds", 5], ["10 seconds", 10], ["15 seconds", 15], ["30 seconds", 30], ["45 seconds", 45]]

ActionView上下文中,您还可以使用pluralize

所以你可以做这样的事情

 <%= ff.select :smtp_delay @test.settings.smtp_delays.map { |s| [pluralize(s, "second"), s] } %>

我可能不会在视图中把它放在正确的位置。可能更适合使用Presenter Pattern来保持视图清除这种东西