mysql – Rails(ActiveRecord):最后选择覆盖以前的

我想加入两个选择:

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) )

希望这可以帮助,

欧根

点赞