0

Ok、

これにより、レールに選択ボックスが作成されます。

<%= select("dashboard_sub_category", "id",options_for_select( @vendor_sub_categories.collect {|p| [p.category_name, p.sub_category_id] }.unshift(["All Categories", 0]))) %>

ページが読み込まれたときに、選択ボックスに次のような要素が必要です。

"すべてのカテゴリ"

デフォルトで選択したいのですが。

私は上記のようにシフト解除を使用しました。

それはいいですか?これを行う他の方法はありますか?

4

3 に答える 3

1

個人的には、ビューがそのコードを実行する必要がないように、セレクターオプションの作成をbefore_filterに抽出するのが好きです。それは次のようなものを取り入れることが@optionsでき、将来的には、ビューを変更せずに、コントローラーだけを変更することなく、そのスコープに該当するため、生成方法を変更できます。ビューは実際のコーディング作業を行うべきではありません。

それから私は通常このようにそれを生成します:

@options = Model.all.inject(Array.new) do |sel, model|
  sel << [model.category_name, model.sub_category_id]
end
@options = [["All Categories", 0]] + @options

次に@options、選択タグに使用できます。

于 2012-05-16T14:29:26.193 に答える
1

選択コードにインクルードブランクを追加してみてください。次に、データベースでデフォルトの位置を0または[すべてのカテゴリ]に設定して、選択メニューにアクセスするときにデフォルト値が0/すべてのカテゴリになるようにします。

{:include_blank => 'All Categories'}

zIが正しい括弧の中に入れているかどうかを確認しますが、これを試してください

<%= select("dashboard_sub_category", "id",options_for_select( @vendor_sub_categories.collect {|p| [p.category_name, p.sub_category_id] }.unshift(["All Categories", 0], { :include_blank => 'All Categories' }))) %>
于 2012-05-16T15:42:43.580 に答える
0

おい、あなたのポイントは、その操作をコントローラーに移動し、ビューでそれを行わないことです。私はそれに完全に同意します、そして私はあなたの答えにとても感謝しています。

それをコントローラーに移動し、@optionsを作成します。ありがとうございます。

さて、私が反対していることについて話しましょう。

言ってるの?

これ、

@options = Model.all.inject(Array.new) do |sel, model|
  sel << [model.category_name, model.sub_category_id]
end
@options = [["All Categories", 0]] + @options

これより良いです、

Model.collect {|p| [p.category_name, p.sub_category_id] }.unshift(["All Categories", 0])

説明を期待できますか?

ruby-1.9.2-p290 :027 >  timing = Benchmark.measure {@options = v.sub_categories.inject(Array.new) do |sel, model|
ruby-1.9.2-p290 :028 >        sel << [model.category_name, model.sub_category_id]
ruby-1.9.2-p290 :029?>     end
ruby-1.9.2-p290 :030?>   @options = [["All Categories", 0]] + @options
ruby-1.9.2-p290 :031?>   }
 =>   0.000000   0.000000   0.000000 (  0.000079)



ruby-1.9.2-p290 :023 > timing = Benchmark.measure { v.sub_categories.collect {|p| [p.category_name, p.sub_category_id] }.unshift(["All Categories", 0])}
 =>   0.000000   0.000000   0.000000 (  0.000086)
于 2012-05-16T15:10:59.747 に答える