我正在努力让用户模型与第三方保持“同步”。
所以在我的User.rb中:
before_create { ThirdParty.create!(user: self) }
before_update { ThirdParty.update!(user: self) }
问题出现在我:
User.create!...
因为两个回调都会被调用(before_create
然后before_update
)。
这就是我现在解决这个问题的方法:
before_create {
@before_create_called = true
ThirdParty.create!(user: self)
}
before_update {
return unless @before_create_called
ThirdParty.update!(user: self)
}
但我对这个解决方案不太自信/不满意。有没有更好的方法来解决这个问题?
修改
我很抱歉,当然这是我的错,感谢@Max Williams我想要深究这一点,所以对于好奇:
我也有:
after_create { A.new() }
其中的某个方面做了这个:
user.toggle(:active)
现在它这样做:
user.update_attributes(active: true).
并没有意识到toggle
跳过validations and callbacks
答案 0 :(得分:1)
由于您希望在每次保存时保持第三方同步,但只想根据是创建还是更新记录来更改操作,请尝试:
before_save do
self.new_record? ? ThirdParty.create!(user: self) : ThirdParty.update!(user: self)
end