1

这是我的代码示例:

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= 方法,其中将设置帐户变量。

您将如何更改此代码以按预期工作?我知道复制电子邮件是一件坏事,但它可能是别的东西,而不是简单的副本。

4

1 回答 1

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保存用户对象时要自动保存关联。否则,您必须在更新用户记录时手动执行此操作。

于 2013-01-16T20:13:33.793 回答