【发布时间】:2016-10-14 06:30:59
【问题描述】:
这是我的简化模型,我加入了模型,
样板房
has_many :towers
和
模型塔
belong_to :apartment
然后我尝试在控制器中加入两个表,也尝试在 Rails 控制台中这样:
Apartment.joins(:towers).select('apartments.id', 'apartments.name', 'towers.id' , 'towers.name')
问题是上面的查询只返回
apartments.id 和 apartments.name
也试过这样使用别名,还是不行
Apartment.joins(:towers).select('apartments.id', 'apartments.name', 'towers.id as towerid' , 'towers.name as towername')
我已确认所有塔楼都有公寓,我知道我可以这样做以获得 1 条记录
Apartment.joins(:towers).select('apartments.id', 'apartments.name', 'towers.id' , 'towers.name').first.towers.id
等等,但我需要所有记录和所有这些字段,请指教。
这是我在 Rails 控制台中得到的最新结果:
Apt Load (1.0ms) SELECT apts.id, apts.apt_name, towers.id as towerid, towers.
tower_name as towername FROM `apts` INNER JOIN `towers` ON `towers`.`apt_id` = `
apts`.`id`
=> #<ActiveRecord::Relation [#<Apt id: 5, apt_name: "basura">, #<Apt id: 5, apt_
name: "basura">, #<Apt id: 124, apt_name: "hydra">, #<Apt id: 124, apt_name: "hy
dra">, #<Apt id: 126, apt_name: "mediterania">, #<Apt id: 126, apt_name: "mediterania">, #<Apt id: 142, apt_name: "apartement gajah mada">, #<Apt id: 142, apt_name: "apartement gajah mada">]>
如您所见,上面的查询只返回 2 个字段,我需要这样的结果:
#<Apt id: 126, apt_name: "mediterania", tower_id: 12, tower_name: "tower A">,
#<Apt id: 126, apt_name: "mediterania", tower_id: 15, tower_name: "tower F">
等...
【问题讨论】:
-
使用 'includes' 代替 'joins'
-
仅供参考。
first.towers.id不起作用你必须写first.towers.first.id -
@GauravGupta 尝试在 Rails 控制台中使用包含,它抛出错误“未知列'towers.tower_name'”
-
@HendraLim 它不起作用,因为 towers 是 activerecord 关系你必须做 towers.first.name
-
@Dinesh 不会只返回一条记录吗?您能否在答案部分中提供您建议的完整示例。
标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord