我正在使用"选择"帮助器迭代嵌套数组以在我的表单上显示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]
非常感谢任何帮助。谢谢!
答案 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来保持视图清除这种东西