Многие-ко-многим через ассоциацию Сборка / Создание свойств в приложении 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
Вы можете уничтожить свою команду в зависимости от вашего приложения.