我有两个型号连接()和自定义表名的关联,其中()请求
Album.rb
class Album < ActiveRecord::Base
has_many :tracks
self.table_name = 'prefix_album'
end
Track.rb现在
class Track < ActiveRecord::Base
belongs_to :album
self.table_name = 'prefix_track'
end
,因为原因,表名是前缀,所以我有我的数据库中的prefix_album
和prefix_track
表SE。基本使用,它工作正常。现在
的问题,下面的查询:
Album.joins(:tracks).where(tracks: { id: [10, 15] })
结果在下面的SQL:
SELECT * FROM "prefix_albums" INNER JOIN "prefix_tracks" ON "prefix_tracks"."album_id" = "prefix_albums"."id" WHERE "tracks"."id" IN (10, 15)
哪些失败了,因为WHERE "tracks"."id"
应该是WHERE "prefix_tracks"."id"
。任何想法为什么active_record能够获得正确的表名.joins(:tracks)
但不是.where(tracks: {})
?
无论如何,我已经想出了这个锻炼:Album.joins(:tracks).merge(Track.where(id: [10,15]))
它给出了相同的结果和作品。
但我想知道为什么以前没有工作
尝试'专辑.joins(:tracks).where(prefix_tracks:{id:[10,15]})' – Pavan