Создание связанной записи в обратном вызове before_create - PullRequest
1 голос
/ 08 июля 2011

У меня есть следующие классы в Rails 3.1.rc4

class User < ActiveRecord::Base
  belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :users
end

Что я хотел бы сделать, так это создавать связанную команду каждый раз, когда пользователь регистрируется с помощью обратного вызова activerecord. Примерно так:

# in the User class
before_create {|user| user.create_team(name: "#{self.name}'s Team") }

Однако, похоже, это не работает должным образом. Когда я иду к rails console, чтобы проверить его, я могу создать пользователя и ввести user.team, и я получаю команду, как и ожидалось. Однако, если я снова наберу user.reload и user.team, я получу nil.

Как заставить пользователя правильно связываться с командой?

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Оказывается, 3.1.rc4 на самом деле имеет ошибку, которая мешает user.create_team работать должным образом.Смотрите вопрос по рельсам github .Исправление было выдвинуто, поэтому я думаю, что оно будет исправлено в следующем RC.

0 голосов
/ 08 июля 2011

Это необходимо сделать после сохранения, поскольку идентификатор не устанавливается до тех пор, пока пользователь не будет сохранен. Rails не позволит сохранить эту запись, потому что связанная запись, модель пользователя, не была сохранена и не имеет идентификатора.

Итак, вы должны сделать это:

class User < ActiveRecord::Base

  belongs_to :team

  after_create add_team_to_user

  def add_team_to_user
      Team.create({:user => self, :name => "#{name}'s Team"})
  end

end

Или для предотвращения массового присвоения:

def add_team_to_user
    self.team.create({:user => self, :name => "#{name}'s Team"})
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...