10

के साथ act_as_list मुझे act_as_habtm_list नामक एक पुरानी प्लगइन मिली है - लेकिन यह रेल 1.0.0 के लिए है।has_and_belongs_to_many रिश्ते

क्या यह कार्यक्षमता अब act_as_list में बनाई गई है? मुझे इस पर कोई जानकारी नहीं मिल रही है।

असल में, मेरे पास एक कलाकार_विशिष्ट तालिका है - कोई मॉडल नहीं। रिश्ते को उन दो मॉडलों के माध्यम से संभाला जाता है जो निर्दिष्ट करते हैं: has_and_belongs_to_many

मैं इस स्थिति में आदेश कैसे निर्दिष्ट कर सकता हूं?

+0

क्या आप अधिक विशिष्ट हो सकते हैं? आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? आपके द्वारा पाई गई प्लगइन का एक लिंक भी अच्छा होगा। – EmFi

+0

प्लगइन की तलाश करते समय, मुझे एक नया मिला जो मैं उपयोग करने में सक्षम हो सकता हूं: http://github.com/SFEley/habtm_list मैं घटनाओं में कलाकारों के आदेश को पूरा करने की कोशिश कर रहा हूं - कहें कि आप यहां जाते हैं एक हेडलाइनर और दो सलामी बल्लेबाज के साथ एक संगीत कार्यक्रम। मैं चाहता हूं कि कलाकार उस क्रम को दिखाएंगे जिसमें कलाकार खेल रहे हैं। – mculp

उत्तर

22

मुझे लगता है कि आपके पास दो मॉडल हैं - कलाकार और कार्यक्रम।

आप उनके बीच एक habtm संबंध चाहते हैं और आप प्रत्येक कलाकार के लिए घटनाओं का एक आदेश परिभाषित करने में सक्षम होना चाहते हैं।

मेरा समाधान यहां है। मैं अपने कोड से यह कोड लिख रहा हूं, लेकिन इसी तरह का समाधान मेरे मामले में काम करता है। मुझे यकीन है कि सुधार के लिए एक कमरा है।

मैं रेल कृत्यों_as_list प्लगइन का उपयोग कर रहा हूं।

कि मैं मॉडल कैसे परिभाषित करेंगे:

class Artist < ActiveRecord::Base 
    has_many :artist_events 
    has_many :events, :through => :artist_events, :order => 'artist_events.position' 
end 

class Event < ActiveRecord::Base 
    has_many :artist_events 
    has_many :artists, :through => :artist_events, :order => 'artist_events.position' 
end 

class ArtistEvent < ActiveRecord::Base 
    default_scope :order => 'position' 
    belongs_to :artist 
    belongs_to :event 
    acts_as_list :scope => :artist 
end 

आप आप एक अतिरिक्त मॉडल ArtistEvent की जरूरत है, अन्य दो में शामिल होने के रूप में देखते हैं। Artist_events तालिका में दो विदेशी आईडी और अतिरिक्त कॉलम - स्थिति होनी चाहिए।

अब आप acts_as_list विधियों (ArtistEvent मॉडल पर, दुर्भाग्य से) का उपयोग कर सकते हैं, लेकिन कुछ

तरह

Artist.find (: आईडी) .events

आप सही में विशिष्ट कलाकार से संबंधित घटनाओं की एक सूची देना चाहिए आदेश।

+0

मेरा जवाब केवल इस जवाब को स्वीकार करने के साथ है कि मैं इसका उपयोग कर रहा हूं: has_and_belongs_to_many और मेरे पास कोई मॉडल नहीं है। क्या यह कोड बराबर है? – mculp

+3

has_and_belongs_to_many को कई लोगों द्वारा बहिष्कृत माना जाता है।मॉडल समाधान में शामिल हों आपको habtm विधि के समान कार्यक्षमता देता है, लेकिन यह अधिक लचीला है। –

+0

नीचे ट्रिशिया के अपडेट देखें। आपको इसे जोड़ने के लिए मध्यवर्ती तालिका में प्राथमिक जोड़ना होगा। – Wilhelm

1

मैं स्वयं को संदर्भित कि

class Product < ActiveRecord::Base 
    has_many :cross_sales 
    has_many :cross_sales_products, :through => :cross_sales, :order => 'cross_sales.position' 
end 

class CrossSale < ActiveRecord::Base 
    default_scope :order => 'cross_sales.position' 
    belongs_to :product 
    belongs_to :cross_sales_product, :class_name => "Product" 
    acts_as_list :scope => :product 
end 

create_table :cross_sales, :force => true, :id => false do |t| 
    t.integer :product_id, :cross_sales_product_id, :position 
end 

लेकिन क्षेत्र cross_sales.position अद्यतन कभी नहीं की तरह साथ की कोशिश कर रहा ...

एक विचार?

अद्यतन: ठीक है फ़ील्ड 'आईडी' है has_many के साथ अतिरिक्त मॉडल के मामले में आवश्यक है: विकल्प के माध्यम से। यह अब अच्छी तरह से काम कर रहा है

0

स्वीकृत उत्तर में, ध्यान दें कि :order => 'artist_events.position' तालिका artist_events तालिका का संदर्भ दे रहा है और मॉडल नहीं।

habtm से has_many :through पर जाने पर मैं इस मामूली हिचकी में भाग गया।

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