2010-11-06 20 views
19

2 modeli vardır ve bunlar bir has_many kullanarak bağlantılıdır: ilişkisi olsa.raylar Has_many: aracılığıyla - içinden tablosunda bir koşullara sahip mümkün mü?

Diğer model tablosunda bir koşul arayacak koşullar parametresi var, ancak birleştirme tablosunda bir koşul oluşturmak için bir ara var mı? Bir Oyun sayıda kullanıcı olabileceğinden

User 
Game 
GameUser 

Bir Kullanıcı, birçok oyun olabilir:

Örneğin, ben var supose. Ama kullanıcı o oyunu sevip sevmemesi örneğin eklem tabloda ek bilgileri depolamak istiyor.

Ve böyle bir ilişki benim kullanıcı modeli filtreyi, bir şey var istiyorum:

has_many :games, :through => 'game_users' 
has_many :liked_games, :through => 'game_users', :conditions_join => { :like => true } 

bu özelliğe sahip bir tatlı yolu var mı?

+1

Olası kopyalar [Raylar vardır \ _many yer: Model Üyelik Nitelikleri Ekstra Find by aracılığıyla] (http://stackoverflow.com/ sorular/408872/raylar-has-pek-through-bulmak-by-ekstra özellikten-in-katılmak-modeli) – DreadPirateShawn

+0

iyi cevabı var bu sorunun, ilişkili olduğu görünüyor => http://stackoverflow.com/ sorular/408872/raylar-has-pek-through-bulmak-by-ekstra özellikten-in-katılmak modeli – Jochen

cevap

18

Jochen'in linki iyi bir çözüme sahiptir - ancak :conditions kullanımdan kaldırılmıştır ve :conditions => ['event_users.active = ?',true] bit çok fazla ray görünmüyor. Bu deneyin: Raylar 4'te

has_many :game_users 
has_many :game_likes, -> { where like: true }, class_name: 'GameUser' 
has_many :liked_games, :through => :game_likes, class_name: 'Game', :source => :game 
+0

Bear akılda 2009 (bağlantılı yanıt) dan cevap. ': Koşullar => [ 'event_users.active =?' Gerçek]' şeyler sadece kendi yolunu bulur herkes için yukarı güncel cevap vermek için çalışıyoruz, ben eleştirmiyorum Raylar 3. –

+1

önce yapıldı nasıldı Burada bir – msanteler

+1

arıyoruz, açıkça "game_likes" i tanımlamaksızın bunu yapmanın bir yolu var, sadece 'like_games'de –

7

Yapabileceğiniz:

# app/models/user.rb 

has_many :liked_games, -> { where(like: true) }, class_name: "Game", 
    through: :game_users, source: :game 
ait
+0

'daki koşullarla demek istiyorum. basit_form'u kullanarak bu koşulla nasıl kayıt oluşturacağınız sorusudur. –

İlgili konular