Ruby on Rails 3: как я могу отключить объект от другого объекта в базе данных, не удаляя его? - PullRequest
1 голос
/ 27 февраля 2012

если у меня есть следующие ассоциации ...

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 ]

4 голосов
/ 27 февраля 2012

Если вы хотите удалить встречу, у которой уже есть экземпляр, используйте collection.delete :

phys.appointments.delete(appoint)

Если вы хотите удалить ВСЕ встречи:

phys.appointments.clear

Подробные объяснения об этих и многих других полезных методах ассоциаций:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html. Найдите раздел «Удаление из ассоциаций».

3 голосов
/ 27 февраля 2012

Разве вы не можете просто установить для этого Appointment physician_id значение nil?

3 голосов
/ 27 февраля 2012

Вы можете использовать подход мягкого удаления: иметь другой столбец: «удаленный логический» или «удаленный_время-время» (этот кодирует две части информации, факт удаления записи и когда).

И затем во всех ваших запросах вам нужно просто соблюдать это: ... WHERE deleted_at IS NULL

С помощью Rails вы даже можете установить это как значение по умолчанию для всех запросов:

class Foo < ActiveRecord::Base
  default_scope where('deleted_at IS NULL')
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...