Que*_*tin 5 activerecord ruby-on-rails
我有两个型号
专辑.rb
class Album < ActiveRecord::Base
has_many :tracks
self.table_name = 'prefix_album'
end
Run Code Online (Sandbox Code Playgroud)
轨道.rb
class Track < ActiveRecord::Base
belongs_to :album
self.table_name = 'prefix_track'
end
Run Code Online (Sandbox Code Playgroud)
现在,由于原因,表名带有前缀,所以我的数据库中有prefix_album和表。prefix_track对于基本使用来说,效果很好。
现在出现以下查询的问题:
Album.joins(:tracks).where(tracks: { id: [10, 15] })
Run Code Online (Sandbox Code Playgroud)
结果如下 SQL:
SELECT * FROM "prefix_albums" INNER JOIN "prefix_tracks" ON "prefix_tracks"."album_id" = "prefix_albums"."id" WHERE "tracks"."id" IN (10, 15)
Run Code Online (Sandbox Code Playgroud)
失败是因为WHERE "tracks"."id"应该是WHERE "prefix_tracks"."id"。知道为什么 active_record 能够获取正确的表名.joins(:tracks)但不能获取正确的表名.where(tracks: {})吗?
无论如何,我已经想到了这个锻炼:Album.joins(:tracks).merge(Track.where(id: [10,15]))它给出了相同的结果并且有效。
但我想知道为什么前者不起作用
尝试一下:
Album.joins(:tracks).where(prefix_tracks: { id: [10, 15] })
Run Code Online (Sandbox Code Playgroud)
您可以添加table_name到模型中,例如:
class Album < ActiveRecord::Base
self.table_name = "prefix_album"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |