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')

これは、account変数が設定される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 に答える