我想加入两个选择:
Place.select('name').select('city')
# => SELECT "places"."city" FROM "places"
但仅选择 列。我认为彼此选择会覆盖前一个。是否可以连接许多选择?
以上代码只是基于我的实际问题的简单示例。解决方案就像将所有内容放在一个选择:
Place.select('name, city)
...对我来说没用,因为我在很多地方多次加入。
提前致谢!
答案 0 :(得分:1)
使用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) )
希望这有帮助,
欧根