Ruby on rails 在创建回调之前在中创建关联记录
我在Rails 3.1.rc4中有以下类Ruby on rails 在创建回调之前在中创建关联记录,ruby-on-rails,ruby-on-rails-3,activerecord,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Activerecord,Ruby On Rails 3.1,我在Rails 3.1.rc4中有以下类 class User < ActiveRecord::Base belongs_to :team end class Team < ActiveRecord::Base has_many :users end 然而,这似乎不能正常工作。当我转到rails控制台检查它时,我可以创建一个用户并键入user.team,然后得到一个预期的团队。但是,如果我再次执行user.reload和user.team,我会得到nil 如何让用户正确地
class User < ActiveRecord::Base
belongs_to :team
end
class Team < ActiveRecord::Base
has_many :users
end
然而,这似乎不能正常工作。当我转到rails控制台检查它时,我可以创建一个用户并键入user.team
,然后得到一个预期的团队。但是,如果我再次执行user.reload
和user.team
,我会得到nil
如何让用户正确地与团队关联?您需要在保存后执行此操作,因为在保存用户之前不会设置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
您需要在保存后执行此操作,因为在保存用户之前不会设置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
原来3.1.rc4实际上有一个bug,它阻止了用户.create\u team
正常工作。看见一个修复程序已经推出,所以我想它将在下一个RC中修复。结果是3.1.rc4实际上有一个错误,它阻止了用户。创建团队
正常工作。看见一个修复程序已被推送,因此我想它将在下一个RC中被修复。我是否应该这样做:self.create_团队(name:“{name}的团队”)
以防止团队模型容易受到批量分配的影响?当我尝试时,它似乎不起作用?恐怕你的建议失败了,因为用户属于团队,而不是相反。当add\u team\u to\u user
调用self.team.cre…
时,它会引发一个错误,因为用户还没有团队。明白吗?这就是为什么我在代码中使用了user.create\u team
。不过,该方法似乎无法更新用户记录以正确表示关联。你知道吗,这实际上是rails的一个bug。查看此github问题:我是否应该这样做:self.create_团队(名称:“{name}的团队”)
,以防止团队模型容易受到批量分配的影响?当我尝试时,它似乎不起作用?恐怕你的建议失败了,因为用户属于团队,而不是相反。当add\u team\u to\u user
调用self.team.cre…
时,它会引发一个错误,因为用户还没有团队。明白吗?这就是为什么我在代码中使用了user.create\u team
。不过,该方法似乎无法更新用户记录以正确表示关联。你知道吗,这实际上是rails的一个bug。请参阅此github问题:
def add_team_to_user
self.team.create({:user => self, :name => "#{name}'s Team"})
end