2010-09-21 56 views
5

Làm cách nào tôi có thể sử dụng allowRested_attributes_for helper của ActiveRecord trong liên kết has_many: thông qua việc thêm thuộc tính vào bảng kết hợp?accept_nested_attributes_for thông qua tham gia bảng với các thuộc tính trên tham gia

Ví dụ, nói rằng tôi đã có một mô hình Đội bóng:

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 

Đội has_many players qua interactions, vì một người dùng có thể chiếm một số vai trò (máy nghe nhạc, quản lý, vv).

Tôi có thể sử dụng accept_nested_attributes_for trong khi đồng thời thêm thuộc tính vào bảng kết nối như thế nào?

Nếu tôi có một kỷ lục đội ngũ hiện có team và một hồ sơ người dùng hiện user, tôi có thể làm một cái gì đó như thế này:

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

Nhưng nếu tôi có thể tạo một nhóm mới với một máy nghe lồng nhau:

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

Trong ví dụ cuối cùng, nhóm, người dùng và bản ghi tương tác được tạo (và nhóm có người dùng thông qua tương tác), nhưng thuộc tính interact.role_id không được đặt ở đây.

+0

Bạn đã từng giải quyết vấn đề này chưa? –

+1

câu trả lời cho câu hỏi của bạn có thể được tìm thấy trong bài đăng này: http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through-how-to-edit-attributes-of-join -mô hình –

Trả lời

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'}]}]) 

Tôi đã không kiểm tra tạo nên có thể có mảng và băm nhỏ một chút sai lầm nhưng bạn có được ý tưởng. Bạn cần cả accept_nested_attributes trên Team và các mô hình tương tác.

Các vấn đề liên quan