Многие-ко-многим через ассоциацию Сборка / Создание свойств в приложении Rails

Следующие классы ассоциируются друг с другом (первое приложение rails без учебника):

class Team < ActiveRecord::Base
  has_many :team_users, :class_name => "TeamUser"
  has_many :users, :through => :team_users
end

class TeamUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :team
end

class User < ActiveRecord::Base
  has_many :team_users, :class_name => "TeamUser"
  has_many :teams, :through => :team_users
end

Если у меня есть атрибут пользователя, при попытке сделать следующее:

u.teams.build(:name => "catsteam", :captain => true, :owner => :true)

Captain и Owner являются свойствами класса TeamUser. Выполняя команду, я получаю следующее:

u.teams.build(:name => "catsteam", :captain => true, :owner => :true)
ActiveRecord::UnknownAttributeError: unknown attribute: captain
...
from -e:1:in `load'
from -e:1:in `<main>'

На заметку, если я получу пользователя, создайте команду, а затем создайте команду, все работает. Я так растерялся и искал, но ничего не могу найти.

Благодарю.

1 ответ

Решение

u.teamsотносится к Team экземпляров. С помощью этой команды вы строите Team случаи, поэтому неудивительно, что капитан и владелец не признаются, поскольку они являются атрибутами TeamUser а не пользователь. Вы должны сделать это в 2 этапа:

team = Team.create
team_user = u.team_users.build(:team_id => team.id)

Конечно, если вы столкнулись с ошибкой проверки на вашем team_userВы можете уничтожить свою команду в зависимости от вашего приложения.

Другие вопросы по тегам