开发者

How to set "selected" in select_tag/options_from_collection_for_select

开发者 https://www.devze.com 2023-03-21 06:13 出处:网络
I\'ve been searching stackoverflow for almost 2 hours now going through similar questions but the answers just don\'t seem to work.

I've been searching stackoverflow for almost 2 hours now going through similar questions but the answers just don't seem to work.

I have the following code:

<%= select_tag "name_dropdown", options_from_collection_for_select(@models, "friendly_id", "name") %>

I'd like to display the option I've chosen previously as selected instead of going to the first tag by default.

In the other questions they've suggested to add the following (n开发者_高级运维one of them work).

<%= select_tag "name_dropdown", options_from_collection_for_select(@models, "friendly_id", "name", "1") %>

Or:

<%= select_tag "name_dropdown", options_from_collection_for_select(@models, "friendly_id", "name", @models.first.id) %>

ps. I'm using Rails 3.1.RC4


Assuming that in addition to your @models which contains the full list, you also have @model which contains the current record, then you can do the following:

<%= 
  select_tag "name_dropdown", 
  options_from_collection_for_select(@models, "friendly_id", "name", @model.id) 
%>

Basically, the fourth parameter to options_from_collection_for_select(...) should contain the id of the item you want to be selected. Your second code sample forces the selected id to be 1 every time, and the third sample you posted always makes the first item in @models selected, regardless of the actual currently selected model.


Throwing this answer here for people that are within a form block, because I too lost more time on this than I wish.

This example is particularly if you have a relationship like a belongs_to, because you will also need to explicitly state that it is the id you are updating rather than updating with a related object/instance. Otherwise you can end up with an ActiveRecord::AssociationTypeMismatch: RelatedModel expected, got "#" which is an instance of String.

<%=
  f.select :related_model_id,
    options_from_collection_for_select(
      RelatedModel.all, :id, :name, f.object.related_model_id)
%>
0

精彩评论

暂无评论...
验证码 换一张
取 消