2010-09-21 14 views
5

में शामिल होने पर विशेषताओं के साथ तालिका में शामिल होने के माध्यम से ac_many में ActiveRecord के accepts_nested_attributes_for सहायक का उपयोग कैसे कर सकते हैं: जॉइन टेबल में विशेषताओं को जोड़ते समय एसोसिएशन के माध्यम से?accepts_nested_attributes_for

उदाहरण के लिए, कहते हैं कि मैं एक टीम मॉडल मिल गया है:

class Team < ActiveRecord::Base 
    role = Role.find_by_name('player') 
    has_many :players, 
      :through => :interactions, 
      :source  => :user, 
      :conditions => ["interactions.role_id = ?", role.id] do 
       class_eval do 
       define_method("<<") do |r|                
        Interaction.send(:with_scope, :create => {:role_id => role.id}) { self.concat r } 
       end 
       end 
      end 
end 

टीम has_many playersinteractions के माध्यम से, एक उपयोगकर्ता कई भूमिकाओं (खिलाड़ी, प्रबंधक, आदि) पर कब्जा कर सकते हैं क्योंकि।

मैं एक साथ जोड़कर तालिका में विशेषताओं को जोड़ते समय accepts_nested_attributes_for का उपयोग कैसे कर सकता हूं?

अगर मैं एक मौजूदा टीम रिकॉर्ड team और एक मौजूदा उपयोगकर्ता रिकॉर्ड user है, मैं कुछ इस तरह कर सकते हैं:

team = Team.create(:name => "New York Lions", 
        :players_attributes => [{:name => 'John Doe'}]) 
team.players.size 
=> 0 
:

team.players << user 
team.players.size 
=> 1 

लेकिन अगर मैं एक नेस्टेड खिलाड़ी के साथ एक नई टीम बनाएं

उस अंतिम उदाहरण में, टीम, उपयोगकर्ता और इंटरैक्शन रिकॉर्ड बनाए जाते हैं (और टीम के पास इंटरैक्शन के माध्यम से उपयोगकर्ता होता है), लेकिन interactions.role_id विशेषता यहां सेट नहीं है।

+0

क्या आपको कभी भी यह समस्या हल हो गई है? –

+1

आपके प्रश्न का उत्तर इस पोस्ट में पाया जा सकता है: http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through-how-to-edit-attributes-of-join -आदर्श –

उत्तर

2
class Team < ActiveRecord::Base 
    accepts_nested_attributes_for :interactions 

class Interaction < ActiveRecord::Base 
    accepts_nested_attributes_for :players 


team = Team.create(:name => "New York Lions", :interactions_attribues => [{ 
        :players_attributes => [{:name => 'John Doe'}]}]) 

मैंने निर्माण की जांच नहीं की है, इसलिए सरणी हो सकती है और थोड़ा गड़बड़ हो सकती है लेकिन आपको विचार मिलता है। टीम और इंटरैक्शन मॉडल पर आपको accepts_nested_attributes दोनों की आवश्यकता है।

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