How to set "selected" in select_tag/options_from_collection_for_select
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)
%>
精彩评论