仅列出唯一值

时间:2012-09-02 15:06:04

标签: ruby-on-rails ruby-on-rails-3 drop-down-menu

我有两个当前设置的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行有该城市我只想要伦敦列出一次)。

对此的任何建议将不胜感激! :)

2 个答案:

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