私はこれがそれを行うべきだと思います:
User.select("country, city").uniq
これは、とのみが入力されたUser
オブジェクトの配列を返す必要があります。次に、それを必要なものにマップできます。country
city
User.select("country, city").uniq.map { |u| "#{u.country} - #{u.city}" }
例えば...
アップデート
コメントへの回答: はい、必要な緯度と経度のフィールドを次のように追加できます。
# remember afterwards to only access the fields you're actively selecting here,
# otherwise you'll get an exception
@users = User.select("country, city, lat, lng").uniq.map { |u| { country: u.country, city: u.city, lat: u.lat, lng: u.lng } }
User
簡単に使用するために、必要に応じて文字列を返すメソッドをモデルに追加します。
def country_city
"#{country} - #{city}"
end
ビューでは、collection_select
ヘルパー メソッドを使用して、(モデルで新しいメソッドを使用して) 必要なフィールドのみを選択に使用できますが、ハッシュ配列にはフィールドlat
とフィールドがあります。lng
collection_select(:name_of_view_instance, :name_of_select_field, @users, :id, :country_city)
これにより、次のような HTML 出力が得られます。
<select name="name_of_view_instance[name_of_select_field]">
<option value="1" selected="selected">United States - Boston</option>
<option value="2">United States - New York</option>
<option value="3">United States - San Francisco</option>
<!-- and so on -->
</select>
上記のリンクにあるヘルパー メソッドのドキュメントを参照してください。