我认为应该这样做:
User.select("country, city").uniq
这应该返回一个对象数组,User
其中只有country
和city
被填充。然后你可以把它映射成你需要的东西,即:
User.select("country, city").uniq.map { |u| "#{u.country} - #{u.city}" }
例如...
更新
回答您的评论:是的,您可以像这样添加所需的 lat 和 lng 字段:
# 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
and字段。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>
请参阅上面链接中的帮助方法的文档。