2010-11-06 12 views
19

Istnieją 2 modele i są one połączone za pomocą relacji has_many: though.szyny has_many: through - Czy możliwe jest spełnienie warunków w tabeli przelotowej?

Istnieje parametr: conditions, który wyszuka warunek w drugiej tabeli modelu, ale czy istnieje jakiś sposób utworzenia warunku w tabeli sprzężenia?

Na przykład supose mam:

User 
Game 
GameUser 

Jeden użytkownik może mieć wiele gier, jak gra może mieć wielu użytkowników. Ale chcę przechowywać dodatkowe informacje we wspólnej tabeli, na przykład, jeśli użytkownik lubi tę grę.

I chciałbym mieć filtr relacją w moim modelu użytkownika, coś takiego:

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

Czy istnieje sposób, aby mieć dość tej funkcji?

+1

Możliwy duplikat [Rails ma \ _many: poprzez Znajdź dodatkowe atrybuty się Dołącz modelu] (http://stackoverflow.com/ question/408872/rails-has-many-through-by-extra-atrybuty-at-join-model) – DreadPirateShawn

+0

Wydaje się być spokrewnionym z tym pytaniem, które ma dobrą odpowiedź => http://stackoverflow.com/ questions/408872/rails-has-many-through-find-by-extra-attributes-in-join-model – Jochen

Odpowiedz

18

Łącze Jochen ma dobre rozwiązanie - ale :conditions jest przestarzałe, a bit :conditions => ['event_users.active = ?',true] po prostu nie wydaje się bardzo szyny. Spróbuj tego:

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

Pamiętaj, że odpowiedź pochodzi z 2009 r. (połączona odpowiedź). ': conditions => ['event_users.active =?', true]' było jak rzeczy zostały zrobione przed Railsami 3. –

+1

Nie krytykuję, tylko próbuję dostarczyć aktualną odpowiedź dla każdego, kto znajdzie sposób tutaj szukając jednego – msanteler

+1

można to zrobić bez jawnego definiowania 'game_likes'?, mam na myśli tylko warunki na' liked_games' –

7

W Rails 4 można zrobić:

# app/models/user.rb 

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

pytanie, jak utworzyć rekord z tym warunkiem za pomocą simple_form –

Powiązane problemy