我在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
。
如何让用户与团队正确关联?
答案 0 :(得分:1)
原来3.1.rc4实际上有一个错误阻止user.create_team
正常工作。见the issue on the rails github。修正已被推送,所以我猜它将在下一个RC中修复。
答案 1 :(得分:0)
您需要在保存之后执行此操作,因为在保存用户之前不会设置ID。 Rails不会让此记录保存,因为相关记录(用户模型)尚未保存且没有ID。
所以你应该这样做:
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