acceptpts_nested_attributes_for через таблицу соединений с атрибутами в соединении - PullRequest
5 голосов
/ 21 сентября 2010

Как я могу использовать помощник ActiveRecord accepts_nested_attributes_for в ассоциации has_many: through при добавлении атрибутов в таблицу соединения?

Например, скажем, у меня есть модель Team:

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

Команда имеет от_мани players до interactions, поскольку пользователь может занимать несколько ролей (игрок, менеджер и т. Д.).

Как я могу использовать accepts_nested_attributes_for, одновременно добавляя атрибуты в таблицу соединений?

Если у меня есть существующая запись команды team и существующая запись пользователя user, я могу сделать что-то вроде этого:

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

Но если я создам новую команду свложенный игрок:

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

В последнем примере создаются команда, пользователь и записи о взаимодействии (и у команды есть пользователь посредством взаимодействий), но атрибут Interactions.role_id не установлен.здесь.

1 Ответ

2 голосов
/ 12 октября 2011
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 для команды, так и модели взаимодействия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...