3

これがシナリオです

Hospital モデルと Contact モデルがあります。状況によっては、このタイプの関係があります。

: これは実際のコードではありません。コードの不要な行を取り除くために単純化する必要がありました。

class Hospital < ActiveRecord::Base  
     attr_accessible :contact_id  
     belongs_to :contacts
end

class Contact <ActiveRecord::Base
    attr_accessible :phone_number
end

連絡先番号を変更したいときはいつでも、新しい連絡先を作成し、Hospital の contact_id をこの新しい連絡先オブジェクトの ID に置き換えます。

これが発生するたびに、古い連絡先を破棄する必要があります。同じことを自動的に行うことができる :dependent=>:destroy に似た関係条件はありますか? そうでない場合は、この動作を実現するために従うべきテクニックがあります。

ありがとうございました。

4

2 に答える 2

2

やりたいことを実行するための組み込み機能はありませんが、コールバックを介して、その機能が属しているモデルに機能を保持できます。

contact_id が変更されたかどうかを確認し、古い値を取得してそのオブジェクトを破棄する、適切なコールバック (:after_updateたとえば)によって呼び出されるメソッドを作成します。

class Hospital < ActiveRecord::Base  
  attr_accessible :contact_id  
  belongs_to :contacts

  after_update :check_contact

  def check_contact
    if contact_id_changed?
      Contact.find(contact_id_was).destroy
    end
  end
end

私はこれをテストしていませんが、開始する必要があります。関連するツールのドキュメントは次のとおりです。

于 2013-09-13T10:07:17.953 に答える
-1

私の知る限り、特定の機能はありません。いくつか質問があります。Contact の新しいオブジェクトを作成するのはなぜですか? 代わりに、同じオブジェクトを更新できます。代わりに、Hospital オブジェクトを更新する前に ID を保存し、更新が成功した後に Contact オブジェクトを破棄することもできますが、これは良い方法ではありません。ありがとうございました。

于 2013-09-13T08:59:21.850 に答える