1

現在、次のように設定されている 2 つの 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回表示するのではなく、ロンドンを1回だけリストしたい都市があるため、ロンドンを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 に答える