这是我的代码示例:
class User < ActiveRecord::Base
belongs_to :account
after_initialize :setup_account
def setup_account
self.account = Account.new
end
def email=(email)
self.account.email = email
super(email)
end
end
现在,以下调用失败:
User.new(email: 'hello@example.com')
因为这是在setup_account方法之前执行email =方法,所以会设置帐户变量。
您如何更改此代码以按预期工作?我知道复制电子邮件是件坏事,但它可能是别的而不是简单的副本。
答案 0 :(得分:0)
您可以使用以下内容。它不使用任何回调,但懒惰地创建一个帐户或返回现有帐户。
class User < ActiveRecord::Base
belongs_to :account, autosave: true
# ...
def user_account
self.account ||= Account.new
end
def email=(email)
user_account.email = email
super
end
end
您还需要指定在保存用户对象时要自动保存account
关联。否则,您必须在更新用户记录时手动执行此操作。