1

アジャイルの本と一緒に読むと、脚注に次のように書かれています。

... ルックアップ テーブルで find(:all) を実行した結果を select ヘルパーに渡すだけです。

わかった ...

<%= f.select :source, Source.find(:all) %>

ソース コントローラ (およびテーブル) は次のようになります。

create_table :sources do |t|
  t.string :source

  t.timestamps
end

しかし、私の選択ボックスは混乱しています。すべての値と表示でこのタイプのデータを取得します。

#<Source:0x23a2bfc>

だから私はやってみましたSource.find(:all, :select => 'name,id')が、それでも奇抜な見た目になります。

私は何を間違っていますか?

4

2 に答える 2

3

オプション (またはキーと値のオプション) のコレクションを渡す必要があります。の 3 番目のパラメーターselectは、実際にメソッドに渡されoptions_for_selectます。これは、例で最もよく説明されています。

options_for_select(["a", "b"])

…となる

<option>a</option><option>b</option>

ほとんどの場合、キーと値のペアに関心があります

options_for_select([["a", "1"], ["b", "2"]])

…となる

<option value="1">a</option><option value="2">b</option>

簡単に言えば、オブジェクトのコレクション全体を渡し、それらをマッピングしてoptions_for_select期待どおりにするのが一般的です。

options_for_select(Model.all.map { |m| [m.attr1, m.attr2] })

select...そして、ビュー内のメソッドを使用して質問に答える

<%= f.select(:method, Model.all.map { |m| [m.attr1, m.attr2] }) %>
于 2009-08-20T06:44:13.597 に答える
3
Source.find(:all)

Source オブジェクトの配列を返します - これはあなたが望むものではありません。必要なのは、一連のオプションです。次のようなもの:

select(:source, "source_id", Source.all.collect {|p| [ p.source, p.id ] })
于 2009-08-20T06:29:18.430 に答える