0

これは簡単な質問ですが、答えを見つけるのに苦労しています。フォームに選択フィールドがあり、クエリレコード数に応じてオプション配列を作成したいと思います。

私は私のコントローラーでそのように私のカウントを取得しています:

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

オプション配列を{["1"、1]、["2"、2]、...}から@num_pagesまでのようにしたいと思います。

これで、ループを実行してその配列を構築できることがわかりましたが、それを実行するためのより「レール」の方法があるかどうかを知りたいと思います。そのため、私の選択コードはまだこれと同じくらい単純である可能性があります。

<%= 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]]

これが「レール」の方法かどうかはわかりませんが、十分に単純だと思います:)

于 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 に答える