次のモデルを検討してください。
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, through: :appointments
end
目的:
- 患者がまだ存在しない場合は作成します。
- まだ存在しない場合は、特定の医師に患者を追加します
私は、これを2つの方法で行うことができると思いました:
方法 1
physician = Physician.find(physician_id)
unless Patient.where(email: email).empty?
record = physician.patients.create email: email
else
#Patient already exist, just add them to appointment
record = Patient.where(email: email)
physician.patients << record
end
方法 2
physician = Physician.find(physician_id)
record = Patient.find_or_create_by(email: email)
# avoid overhead of SQL JOINS, use simple SELECT/CREATE
if Appointment.where(physician_id: physician_id).where(patient_id: record.id).empty?
Appointment.create physician_id: physician.id, patient_id: record.id
end
さて、上記の2つの方法のうち、どちらがより良い方法でしょうか? また、パフォーマンスの点で上記の用語よりも優れている別の方法はありますか?