2016-04-06 10 views
1

私は親のUserモデルを持っていて、それぞれのユーザーはhas_oneContactというユーザーの連絡先情報を保持しています。親モデルの子協会の設定者を無効にする

連絡先フィールドの1つはemailです。

- この質問の文脈の外で様々なレガシーの理由との理由から、私はそれは言い換えれば User

の財産であるかのように私はこれを行うにはしたいと思い、直接#emailを呼び出すことができるのが大好きですこれに代えて

user.email 
user.email = "[email protected]" 

- 親から子供のゲッター/セッターをオーバーライドし、次のように私は私のモデルを打ち出し

user.contact.email 
user.contact.email = "[email protected]" 

User -

class User < ActiveRecord::Base 
    has_one :contact 

    def email 
    contact.email 
    end 

    def email=(value) 
    contact.email = value 
    end 
end 

class Contact < ActiveRecord::Base 
    belongs_to :user 
end 

あなたはすでにセッターに気付いているかもしれません。Userが保存されている場合、子モデルは保存されません。

これを回避するには最も堅牢な方法はありますか?

ありがとうございます!

答えて

0

OK]をクリックして、好奇心誰のための解決策を見つけた - 親が保存されている場合、正しく子の関連付けを保存 - 自動保存

ActiveRecord::AutosaveAssociationはまさにこれで役立ちますモジュールです。

autosave: trueを含めるだけです。例 -

has_one :contact, autosave: true 

また、削除のマークが付けられたレコードを破壊するの世話をし、他のいくつかの空想の事。

私もクイックチェックをしました。本当に必要な場合を除き、スマートにDBにヒットしません。つまり、親を更新するだけでは、他のSQL UPDATEステートメントとの子の関連付けを保存することはありません。

hereのドキュメントをご覧ください。

関連する問題