Связи Rails has_many удаляют родительский объект, но не дочерние
Сценарий состоит в том, что есть две модели, одна из которых - Room, а другая - Tickets, а связь - Room has_many:tickets.
Требование заключается в том, что при удалении номера билеты не должны быть удалены. Как это сделать, потому что у таблицы заявок есть внешний ключ, называемый room_id?
И предположим, если я смогу это сделать, то как я смогу получить информацию о номере для этого конкретного билета?
3 ответа
Это общее поведение Rails. Я полагаю, вы используете dependent: :destroy
в вашей ассоциации.
То, что вы хотели бы сделать, это dependent: :nullify
, Это приведет к удалению объекта комнаты без удаления связанных билетов и обновлению только room_id
обнулить в билетах
class Room < ActiveRecord::Base
has_many :tickets, dependent: :nullify
end
Что касается вашего второго вопроса, чтобы получить доступ к деталям комнаты после удаления, я бы предложил вам использовать soft_delete вместо фактического удаления. Здесь вы будете делать следующее: когда комната удаляется, вместо того, чтобы удалить ее, вы удалите ее. Следовательно, записи билетов будут сохраняться, и вы также сможете использовать детали комнаты.
Есть драгоценные камни, доступные для того же самого. Одним из таких драгоценных камней является паранойя. Вы можете посмотреть различные учебники по этому камню.
Надеюсь, это полезно. Дайте мне знать, если вам нужно другое руководство.
Добавлять dependent: :nullify
к ассоциации has_many, это изменит значение foreign_key на null после удаления родителя:
has_many :tickets, dependent: :nullify
Смотрите документацию по рельсам: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
Вы можете сделать это
class Room < ActiveRecord::Base
has_many :tickets,dependent: :nullify
end
оформить заказ