Многие ко многим через ассоциацию Создание / создание свойств в приложении Rails - PullRequest
3 голосов
/ 24 февраля 2012

Следующие классы ассоциируются друг с другом (первое приложение 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 Ответ

0 голосов
/ 24 февраля 2012

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

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

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

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