1

我有两个当前设置的 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>

我想要的是下拉列表只显示我的数据库表中的唯一值列表(例如在城市而不是显示伦敦 5 次,因为有 5 行有那个城市我希望伦敦只列出一次)。

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

4

2 回答 2

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
于 2012-09-02T15:32:31.220 回答
2

以下答案的更好范围另

class Job
  scope :unique_by_city, lambda { select(:city).uniq}
end
于 2012-09-02T15:44:03.230 回答