如何在select_tag / options_from_collection_for_select中设置“selected”

时间:2011-07-16 21:29:18

标签: ruby-on-rails

我一直在搜索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

2 个答案:

答案 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)
%>