根据模型属性设置下拉列表中的选定值

时间:2012-01-12 09:26:52

标签: ruby-on-rails

我有一个简单的下拉列表:

<%= collection_select("user_cities", "city_id", current_user.cities, :id, :name ) %>

current_user.cities是用户城市的数组。每个城市都有一个名为“is_primary”的字段,只有一个城市将其设置为true。

我的问题是,我如何制作上面的collection_select(或根据需要进行转换),以便它根据City.is_primary选择所选的选项?

3 个答案:

答案 0 :(得分:3)

来自the docs

  

默认情况下,post.person_id [在您的情况下为user_cities.city_id] 是所选选项。指定:selected => value以使用其他选择,或指定:selected => nil以取消选中所有选项。

有了这些知识,我们可以将适当的选项传递给collection_select

<%= collection_select "user_cities", "city_id", current_user.cities, :id, :name,
      :selected => current_user.cities.detect(&:is_primary).id
%>

答案 1 :(得分:1)

collection_select("user_cities", "city_id", current_user.cities, :id, :name,{:selected => current_user.cities.where(:is_primary => 1)})

答案 2 :(得分:1)

我首先要在用户模型中定义一个名为primary_city的方法。

def primary_city
  cities.where(:is_primary => true).first
end

然后,

<%= collection_select("user_cities", "city_id", current_user.cities, :id, :name, { :selected=> current_user.primary_city.id } ) %>