@eldar_web

Как в Ruby on Rails убрать (unscoped) скоупы у всех связанных?

Допустим, есть модели:
- Subscriber
- Address (subscriber_id)
Они связаны друг с другом (has_many и belong_to)

Для косвенного удаления из базы у каждого есть поле deleted со значениями true или false.
Скоуп по умолчанию deleted: false
Далее, допустим удалили Subscriber и его адресс (deleted: 'true') и хотели обратно вернуть,
для этого делаем так:
subscriber = Subscriber.unscoped.find(777)
И если захотим вытащить адреса таким способом:
subscriber.addresses - то не получается.
Вот общий код:
class Subscriber < ActiveRecord::Base
default_scope { where(deleted: 'false') }
has_many :addresses
end

class Address < ActiveRecord::Base
default_scope { where(deleted: 'false') }
belongs_to :subscriber
end


Какое решение?
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Fusion23
Я бы посоветовал никогда не использовать default_scope, это может принести еще кучу проблем в будущем при масштабировании, увлечения сложности поведения модели и пр., а по-крайней мере создать концерн со скоупомами :undeleted, :deleted, и подгружать уже объекты используя необходимые скоупы. Для удобства подгрузки объектов в контроллерах могу порекомендовать гем has_scope https://github.com/plataformatec/has_scope где по умолчанию можно задать применять скоуп :undeleted, и в целом управлять поведениями всех скоупов)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы