2016-04-11 10 views
2

Ben(katılır) ve özel tablo adı ile ortaklık konulu nerede() isteği

class Track < ActiveRecord::Base 
    belongs_to :album 
    self.table_name = 'prefix_track' 
end 

Şimdi iki model

Album.rb

class Album < ActiveRecord::Base 
    has_many :tracks 
    self.table_name = 'prefix_album' 
end 

Track.rb var nedenleri nedeniyle tablo adları öneki, bu yüzden benim databa içinde prefix_album ve prefix_track tabloları var se. Temel kullanım için iyi çalışıyor.

Şimdi aşağıdaki sorgu ile sorun: Aşağıdaki SQL

Album.joins(:tracks).where(tracks: { id: [10, 15] }) 

Sonuçlar: WHERE "tracks"."id"WHERE "prefix_tracks"."id" olmalıdır çünkü başarısız

SELECT * FROM "prefix_albums" INNER JOIN "prefix_tracks" ON "prefix_tracks"."album_id" = "prefix_albums"."id" WHERE "tracks"."id" IN (10, 15) 

. Active_record neden .joins(:tracks) için doğru tablo adını alabilir, ancak .where(tracks: {}) için uygun değil?

Her neyse, bu çalışmayı anladım: Album.joins(:tracks).merge(Track.where(id: [10,15])), aynı sonucu ve çalışmayı verir.

Ama eski programından neden bilmek istiyorum

+1

deneyin 'Albüm:

Album.joins(:tracks).where(prefix_tracks: { id: [10, 15] }) 

Sen gibi modele table_name ekleyebilir .joins (: tracks) .where (prefix_tracks: {id: [10, 15]}) ' – Pavan

cevap

1

hoşuna deneyin:

class Album < ActiveRecord::Base 
    self.table_name = "prefix_album" 
end 
+0

Evet, işe yarıyor ama bu sadece bir başka çözüm ve kararsız olanı (eğer tablo adının ayarını değiştirirseniz bozulur) – Quentin

+0

sonra 'table_name' modeline ekleyin ve bir yerden çalışacaktır. –

+0

'table_name' zaten modele ayarlandı – Quentin

İlgili konular