2012-03-23 15 views
12

मेरे पास एक उत्पाद है, और एक उत्पाद में कई छवियां हो सकती हैं। यह एक एसोसिएशन टेबल के माध्यम से है। हालांकि, मैं एक उत्पाद को एक मुख्य छवि रखना चाहता हूं।रेल है has_many एसोसिएशन

मुझे पता है कि मॉडल में एक विधि के साथ करना बहुत आसान है, लेकिन मैं इसे एक एसोसिएशन बनना चाहता हूं ताकि मैं इसे include का उपयोग कर क्वेरी में प्रीलोड कर सकूं।

मॉडल:

class Product < ActiveRecord::Base 
    has_many :image_associations, :as => :imageable 
    has_many :images, :through => :image_associations 
end 

class ImageAssociation < ActiveRecord::Base 
    belongs_to :image 
    belongs_to :imageable, :polymorphic => true 
end 

class Image < ActiveRecord::Base 
    has_many :image_associations 
end 

ImageAssociation तालिका में, वहाँ एक बूलियन स्तंभ 'सुविधा' नामक जो 'मुख्य' छवि के रूप में एक छवि संबद्ध करती है।

belongs_to :image, :class => "Image", :foreign_key => "main_image_id" 

बहरहाल, यह किसी भी वापस आने के लिए अनुमति नहीं देता:

तरीके मैं यह कर रहा उत्पादों तालिका में एक main_image_id कॉलम शामिल है, और फिर Image मॉडल को जोड़ने के बारे में सोचा है में से एक यदि मुख्य छवि शून्य है - जिसे मैं एसोसिएशन लोड करना चाहता हूं, तो दूसरी है Imany छवियों के लिए।

इसीलिए मैं की तरह छवियों मॉडल में कुछ करने के लिए उम्मीद कर रहा था:

has_one :image, :through => :images, :conditions => 'feature = true', :order => 'created_at DESC' 

लेकिन वह मुझे एक संघ त्रुटि देता है।

क्या कोई तरीका है कि मैं इसे संपादित कर सकता हूं, या क्या मुझे वास्तव में प्रत्येक मुख्य_image_id फ़ील्ड में एक छवि को धक्का देने के लिए एक रेक कार्य चलाने की आवश्यकता है, और फिर भविष्य में उत्पादों के लिए एक सत्यापन जोड़ें ताकि यह सुनिश्चित किया जा सके कि मुख्य छवि जोड़ा गया है ?

संपादित करें:

मैं बजाय एक has_and_belongs_to_many संघ प्रयोग करना चाहिए?

उत्तर

13

आप लगभग वहां हैं, मुझे लगता है, हालांकि मैं पॉलिमॉर्फिक संघों पर इतना स्पष्ट नहीं हूं। मुझे लगता है कि आप निम्नलिखित चाहते हैं:

has_one :main_image_assoc, class => "ImageAssociation", :conditions => 'feature = true', :order => 'created_at DESC', :as => :imageable 
has_one :image, :through => :main_image_assoc 
+0

नहीं। वांछित होने पर संग्रह के लिए आप अन्य फ़िल्टर किए गए has_many एसोसिएशन के साथ ऐसा कर सकते हैं, लेकिन has_one निर्दिष्ट नहीं करते हैं। यह त्रुटि होती है: 'ActiveRecord :: HasOneThroughCantAssociateThroughCollection: has_one नहीं हो सकता है: एसोसिएशन' आलेख # छवि 'के माध्यम से जहां: एसोसिएशन के माध्यम से' आलेख # image_associations 'एक संग्रह है। इसके बजाय विकल्प के माध्यम से हैसोन या संबंधित_to एसोसिएशन निर्दिष्ट करें। 'पहले से ही कोशिश की थी। –

+0

आह, मैं देख सकता हूं। मुझे एक संपादन करने की कोशिश करते हैं। – Chowlett

+1

पहली पंक्ति में सुधार- ': has_one: main_image_assoc,: class_name =>" ImageAssociation ",: order => 'feature = true',: as =>: imageable' ... यह फ़ॉलबैक (और सही वाक्यविन्यास) के लिए अनुमति देता है । धन्यवाद! –

संबंधित मुद्दे