2012-02-27 3 views
1

私は、以下の関連を持っている場合...Ruby on Rails 3:データベース内の別のオブジェクトからオブジェクトを削除せずに切断するにはどうしたらいいですか?

class Physician < ActiveRecord::Base 
    has_many :appointments 
    has_many :patients, :through => :appointments 
end 

class Appointment < ActiveRecord::Base 
    belongs_to :physician 
    belongs_to :patient 
end 

私は...

appoint = Appointments.find(params[:id]) 
phys = Physician.find(params[:id]) 
phys.appointments << appoint 
phys.save 

によって医師への既存の予定を追加することができますが、私は予定を削除する方法を見つけ出すことはできませんそれを削除せずに予定の医師のリストから削除します。私は医師のテーブルから切断された後に予定表に予定を保持したいと思います。

あなたの知恵のためにあまり前もってありがとう!

答えて

3

は、あなただけのことを設定できません。特にAppointmentphysician_id~nil

+0

これは最も簡単な方法です。しかし、それが参照整合性を維持したいと思っていたのかどうか、そして/またはどの医師が予定されていたかを追跡することができるかどうかという疑問からは明らかではありませんでした。 nullに設定することにより、彼はその情報を失います。しかし、おそらくそれはOKです。質問は特定しません。 –

3

ソフト削除アプローチを使用することができます。別の列に「deleted boolean」または「deleted_at datetime」(2つの情報をエンコードするこの1つ、レコードが削除されたこと、

そして、すべてのクエリであなただけのこの尊重する必要があります:あなたもすべてのクエリのデフォルトとしてこれを設定することができますレールに... WHERE deleted_at IS NULL

を:

class Foo < ActiveRecord::Base 
    default_scope where('deleted_at IS NULL') 
end 
関連する問題