我有两个当前设置的collection_select下拉菜单:
<div class="field">
<%= f.label :country_cont, "Country" %>
<%= f.collection_select(:country_cont, Country.all, :country, :country) %>
</div>
<div class="field">
<%= f.label :city_cont, "City" %>
<%= f.collection_select(:city_cont, Job.all, :city, :city) %>
</div>
我想要的是下拉菜单只显示我的数据库表中的唯一值列表(例如在City中而不是显示伦敦5次,因为有5行有该城市我只想要伦敦列出一次)。
对此的任何建议将不胜感激! :)
答案 0 :(得分:3)
我会在Job类中创建一个按唯一城市过滤的范围。 实际实现方式取决于您的数据库。以下示例使用MySQL语法:
class Job
scope :unique_by_city, lambda { select('DISTINCT(city)') }
end
在你看来
<div class="field">
<%= f.label :city_cont, "City" %>
<%= f.collection_select(:city_cont, Job.unique_by_city, :city, :city) %>
</div>
如果您的数据库中没有多个作业,则只需加载所有记录并在ruby中执行:
class Job
def self.unique_by_city
all.uniq_by(&:city)
end
end
答案 1 :(得分:2)
以下答案的更好范围see
class Job
scope :unique_by_city, lambda { select(:city).uniq}
end