2010-11-06 12 views
19

2 मॉडल हैं, और वे has_many का उपयोग कर जुड़े हुए हैं: हालांकि संबंध।रेल के पास है_मनी: के माध्यम से - क्या तालिका के माध्यम से स्थितियां हो सकती हैं?

वहाँ है: शर्तें पैरामीटर, जो अन्य मॉडल तालिका में एक शर्त की तलाश करेगा, लेकिन क्या किसी भी तालिका में शर्त बनाने के लिए कोई रास्ता है?

उदाहरण के लिए, supose मेरे पास है:

User 
Game 
GameUser 

एक उपयोगकर्ता कई खेल हो सकता है, के रूप में एक खेल के कई उपयोगकर्ता हो सकता है। लेकिन मैं संयुक्त तालिका में अतिरिक्त जानकारी स्टोर करना चाहता हूं, उदाहरण के लिए यदि उपयोगकर्ता उस गेम को पसंद करता है या नहीं।

और मैं इस तरह मेरे उपयोगकर्ता मॉडल में एक रिश्ता फिल्टर, कुछ है करना चाहते हैं:

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

वहाँ इस कार्यक्षमता के लिए एक सुंदर तरीका है?

+1

की संभावित डुप्लिकेट [रेल है \ _many: अतिरिक्त द्वारा खोजें के माध्यम से शामिल हों विशेषताएँ मॉडल] (http://stackoverflow.com/ प्रश्न/408872/रेल-पास-से-अतिरिक्त-विशेष-गुण-इन-जॉइन-मॉडल) – DreadPirateShawn

+0

इस प्रश्न से संबंधित होने लगता है, जिसका एक अच्छा उत्तर है => http://stackoverflow.com/ प्रश्न/408872/रेल-कई-से-खोज-द्वारा-अतिरिक्त-विशेषताओं-इन-जॉइन-मॉडल – Jochen

उत्तर

18

जोचेन के लिंक का एक अच्छा समाधान है - लेकिन :conditions बहिष्कृत है और :conditions => ['event_users.active = ?',true] बिट बहुत रेल नहीं लगता है। इस प्रयास करें:

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

ध्यान रखें कि उत्तर 200 9 (लिंक किए गए उत्तर) से है। ': conditions => ['event_users.active =?', true] 'रेल 3 से पहले चीजें कैसे की गई थीं। –

+1

मैं आलोचना नहीं कर रहा हूं, बस अपना रास्ता ढूंढने वाले किसी भी व्यक्ति के लिए एक अद्यतित उत्तर प्रदान करने का प्रयास कर रहा हूं यहां एक – msanteler

+1

की तलाश है, इसे 'game_likes' को स्पष्ट रूप से परिभाषित किए बिना ऐसा करने का कोई तरीका है? मेरा मतलब है कि 'liked_games' –

7

रेल 4 में आप कर सकते हैं:

# app/models/user.rb 

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

पर स्थितियों के साथ सवाल यह है कि simple_form का उपयोग करके इस स्थिति के साथ रिकॉर्ड कैसे बनाएं –