5

ドロップダウンメニューで事前に選択される値をActionView-Helpercollection_selectに取得させようとしています。

どちらでもない(:selectedhtml-option-hash内)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected => @my_collection_object.id}) %>

また(:selectedオプションハッシュで)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {:selected => @my_collection_object.id}, {}) %>

うまくいくようです。

私は何が間違っているのですか?誰かがこれで私を助けることができますか?

4

5 に答える 5

8

ドキュメントから:

Author使用例( 、のインスタンスにPost関連付けられているものを選択@post):

collection_select(:post, :author_id, Author.all, :id, :name_with_initial)

@post.author_idがすでに1の場合、これは次を返します。

<select name="post[author_id]">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>

@my_object.my_methodしたがって、が使用可能なオプション値の1つと一致する値を返すことを確認する必要があります。一致するものがある場合は、そのオプションが選択されます。

于 2009-06-19T17:29:58.647 に答える
2

ドキュメントによると@my_object.my_method、オプションの1つと同じ値がある場合、デフォルトでその値が選択されます。

逆に、 :options_from_collection_for_selectと組み合わせて使用​​してみることができます。select_tag

<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>
于 2009-06-19T16:35:20.633 に答える
1

使用する:selected_value

%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>
于 2009-08-24T18:32:04.403 に答える
0

@my_object.my_methodがnilを返すかどうかを確認します。もしそうなら、

メソッドの呼び出しでnilが返された場合、オプションハッシュに:promptまたは:include_blankを含めないと選択は行われません。

それ以外は、rdocの例のようにラムダを使用してみることができます

{:disabled => lambda {|category| category.archived? }

あなたの場合、これは次のようになります

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}
于 2009-06-19T16:40:26.780 に答える
-1

コレクションが2値配列の配列の形式である場合にも機能します。

CURRENCIES = [["USD", "$"], ["BRL", "R$"]]

<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>

:firstandトリックは:last、これらのことに対して別のモデルを定義する必要なしに、これらのことに対して非常にうまく機能します。

于 2011-07-17T07:59:19.057 に答える