我想加入两个选择:
Place.select('name').select('city')
# => SELECT "places"."city" FROM "places"
但它只选择城市列.我认为彼此选择会覆盖前一个.是否有可能连接多个选择?
以上代码只是基于我的实际问题的简单示例.解决方案就像将所有内容放在一个选择中
Place.select('name, city)
……对我来说没用,因为我在很多地方加入了很多次.
提前致谢!
最佳答案 有了Arel
Arel可以用来实现你的目标……
p = Place.arel_table
arel_select = p.project('name').project('city')
arel_select.to_sql
=> "SELECT name, city FROM \"places\""
Place.find_by_sql(arel_select.to_sql)
也工作
arel_select = p.project('name')
arel_select.project('city').to_sql
但请注意……
arel_select = p.project('name').project('city').project('city')
arel_select.to_sql
=> "SELECT name, city, city FROM \"places\""
使用ActiveRecord
merge方法也能够合并选择部分.
Place.select(:name).merge( Place.select(:city) )
生成以下SQL
SELECT "places"."name", "places"."city" FROM "places"
结果关系:
=> #<ActiveRecord::Relation [#<Place id: nil, name: "Zoo", city: "Berlin">]>
与上面的结果相同
Place.select(:name).merge( Place.select(:city) ).merge(Place.select(:city) )
希望这可以帮助,
欧根