Ruby on rails 在创建回调之前在中创建关联记录

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 如何让用户正确地

我在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


如何让用户正确地与团队关联?

您需要在保存后执行此操作,因为在保存用户之前不会设置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