質問

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

どちらでもない(html-option-hashの:selected

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

nor(option-hashの:selected

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

動作しているようです。

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

役に立ちましたか?

解決

ドキュメントから:

使用例( Post @post のインスタンスに関連する Author を選択):

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 が使用可能なオプション値のいずれかに一致する値を返すことを確認する必要があります。一致する場合、そのオプションが選択されます。

他のヒント

の場合、ドキュメントによると@ 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) %>

:selected_value

を使用します
%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>

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

  

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

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

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

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

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}

コレクションが2値配列の配列の形式でも機能します:

CURRENCIES = [["USD", "<*>quot;], ["BRL", "R<*>quot;]]

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top