2011-01-30 15 views
5

कहें कि मेरे पास दो मॉडल, निदेशक और मूवी हैं, और एक तीसरे जुड़ने वाले मॉडल हैं जिन्हें निर्देश कहा जाता है। वे इस तरह के रूप में परिभाषित किया जाता है:has_many के साथ एसोसिएशन बनाना या अपडेट करना:

मूवी:

class Movie < ActiveRecord::Base 
    has_many :directions 
    has_many :directors, :through => :directions 
end 

निर्देशक:

class Director < ActiveRecord::Base 
    has_many :directions 
    has_many :movies, :through => :directions 
end 

दिशा:

class Direction < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :director 
end 

जब मैं एक फिल्म बनाता हूं जिसे मैं या तो आपूर्ति की गई जानकारी (नाम और imdb_id) के साथ एक निर्देशक बनाने में सक्षम होना चाहता हूं या imdb_id के आधार पर एक मौजूदा निदेशक ढूंढ सकता हूं और इसे मूवी रिकॉर्ड के साथ जोड़ सकता हूं।

अनिवार्य रूप से, मैं कभी भी एक निदेशक को हटाना या संपादित नहीं करना चाहता हूं। मैं केवल एक नया निदेशक बनाने में सक्षम होना चाहता हूं अगर वह अपने आईएमडीबी_आईडी के आधार पर अस्तित्व में नहीं है, या जब मैं फिल्म बना रहा हूं या संपादित कर रहा हूं तो पूर्व-मौजूदा निर्देशक के साथ सहयोग करना चाहता हूं।

मेरा सवाल है, मैं इसे सब कुछ दृश्य/नियंत्रक से कैसे जोड़ूं?

accepts_nested_attributes_for ठीक काम करता है छोड़कर आप वास्तव में निदेशक का नाम संपादित कर सकते हैं आप एक फिल्म है जो मैं नहीं चाहता संपादित कर रहे हैं जब। मुझे वास्तविक निदेशकों, केवल संघों को अद्यतन/नष्ट करने में बिल्कुल रूचि नहीं है।

उत्तर

3

आपकी मूवी इंस्टेंस में एक निर्देशक_आईडी सरणी है जिसमें संबंधों की आईडी शामिल है। तो आप आसानी से उदाहरण के लिए सभी निर्देशकों जो चेक बॉक्स और संबंधों की जांच करने के लिए कहें ...

<% Director.all.each do |director| %> 
    <%= check_box_tag 'movie[director_ids][]', director.id, @movie.directors.include?(director) %> 
    <%= director.name # or whatever (title, etc) %> 
<% end %> 

<%= hidden_field_tag 'movie[director_ids][]', '' %> 

(hidden_tag है उपयोगकर्ता सभी बॉक्स अनचेक करें जब, ताकि director_ids खाली हो जाएगा सूचीबद्ध कर सकते हैं।)

+0

धन्यवाद, जो मुझे वहां भाग लेता है। अंततः मेरे पास कुछ निर्देशक (सैकड़ों में) होंगे, इसलिए उन्हें प्रदर्शित करने से सभी काम नहीं करेंगे, लेकिन मैं इसे कुछ AJAX खोज जादू के साथ ठीक कर सकता हूं जो ठीक है। मेरे पास एक विशिष्ट उपयोग केस है जो मुझे यकीन नहीं है कि कैसे कार्यान्वित किया जाए। मान लें कि मैं स्टीवन स्पीलबर्ग के साथ एक निर्देशक के रूप में एक फिल्म बनाते हैं। तब मुझे एहसास हुआ कि उसने वास्तव में इसे निर्देशित नहीं किया लेकिन जेम्स कैमरून ने किया और मेरे पास अभी तक डीबी में जेम्स कैमरून नहीं है। आपके समाधान के साथ मैं स्टीवन स्पीलबर्ग को अनचेक कर सकता हूं लेकिन मैं जेम्स कैमरून को कैसे जोड़ूंगा और निदेशक डीबी रिकॉर्ड और एसोसिएशन कैसे बनाऊंगा? धन्यवाद! –

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