我一直在搜索stackoverflow近2个小时,现在经历类似的问题,但答案似乎不起作用。
我有以下代码:
<%= select_tag "name_dropdown", options_from_collection_for_select(@models, "friendly_id", "name") %>
我想显示我之前选择的选项,而不是默认情况下转到第一个标签。
在其他问题中,他们建议添加以下内容(均不起作用)。
<%= select_tag "name_dropdown", options_from_collection_for_select(@models, "friendly_id", "name", "1") %>
或者:
<%= select_tag "name_dropdown", options_from_collection_for_select(@models, "friendly_id", "name", @models.first.id) %>
PS。我正在使用Rails 3.1.RC4
答案 0 :(得分:27)
假设除了包含完整列表的@models
之外,还有包含当前记录的@model
,那么您可以执行以下操作:
<%=
select_tag "name_dropdown",
options_from_collection_for_select(@models, "friendly_id", "name", @model.id)
%>
基本上,options_from_collection_for_select(...)
的第四个参数应包含您要选择的项目的ID。您的第二个代码示例每次都会强制选定的ID为1,而您发布的第三个样本始终会选择@models
中的第一个项目,而不管当前选择的实际模型是什么。
答案 1 :(得分:0)
将这个答案扔给表单块中的人,因为我在此上浪费的时间比我希望的要多。
如果您的关系类似于belongs_to
,则此示例尤其有用,因为您还需要明确声明它是您要更新的ID,而不是使用相关的对象/实例进行更新。否则,您可能会以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)
%>