我有一个简单的下拉列表:
<%= collection_select("user_cities", "city_id", current_user.cities, :id, :name ) %>
current_user.cities是用户城市的数组。每个城市都有一个名为“is_primary”的字段,只有一个城市将其设置为true。
我的问题是,我如何制作上面的collection_select(或根据需要进行转换),以便它根据City.is_primary选择所选的选项?
答案 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 } ) %>