0

这是一个简单的问题,但我很难找到答案。我的表单中有一个选择字段,我想根据我的查询记录数构建选项数组。

我在我的控制器中得到我的计数:

@num_pages= Page.where(:site_id => @siteid).count

我希望我的选项数组就像 {["1", 1], ["2", 2], ...} 一直到@num_pages。

现在我知道我可以做一个循环并构建该数组,但我想知道是否有更多“rails”的方式来做到这一点。这样我的选择代码仍然可以像这样简单:

<%= select_tag(:nav_order, options_for_select(@num_pages)) %>

...不使用循环和数组推送以及你有什么。

更新

感谢回复,我的代码现在可以这样工作。但是,我决定将映射保留在视图中而不是控制器中。

<% options_array = (1..@page_count).to_a.collect{|p| ["#{p}", p]} %>  
<%= select_tag(:nav_order, options_for_select(options_array)) %>
4

2 回答 2

2

如果我正确理解了您的问题,我认为这应该可以解决问题:

Array.new(@num_pages){ |i| [(i+1).to_s, i+1] }

带有数字和输出的示例:

irb(main):001:0> Array.new(5){ |i| [(i+1).to_s, i+1] }
=> [["1", 1], ["2", 2], ["3", 3], ["4", 4], ["5", 5]]

不确定这是否是“rails”方式,但我认为这很简单:)

于 2013-02-08T20:37:37.627 回答
1

在控制器中构建数组?

num = Page.where(:site_id => @siteid).count
@num_pages = (1..num).to_a.collect{|p| ["#{p}", p]}
于 2013-02-08T20:44:32.303 回答