开发者

Createing associated record in before_create callback

I have the following classes 开发者_如何学Goin a Rails 3.1.rc4

class User < ActiveRecord::Base
  belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :users
end

What I'd like to do is create an associated team every time a user signs up using an activerecord callback. Something like this:

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

However this doesn't seem to work properly. When I go to the rails console to check it, I can create a user and type user.team and I get a team as expected. However, if I do user.reload and user.team again, I get nil.

How do I get the user to properly associate with the team?


Turns out 3.1.rc4 actually has a bug which prevents user.create_team from working properly. See the issue on the rails github. A fix has been pushed so I guess it will be fixed in the next RC.


You need to do this with an after save because the id is not set until the user is saved. Rails won't let this record save because the associated record, the user model, has not been saved and does not have an id.

So you should do this:

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

Or to prevent mass-asignment:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜