Фильтрация всех поисков по модели с рубином на рельсах - PullRequest
0 голосов
/ 07 марта 2019

Я имею дело с ситуацией с рефакторингом в работающем приложении с Ruby on Rails.

В приложении у меня есть пользователь, чей профиль может быть активным / неактивным.

У Пользователя тоже есть дата его рождения. И для всех пользователей младше 13 лет учетные записи должны вести себя как «неактивные».

Я только что добавил логическое свойство is_active в модель User.

Вопрос в том, что я не хочу рефакторировать ВСЕ мои запросы на Пользователей в приложении, добавив

User.where(is_active: true).where(age > 13)  

От руки на всех моделях

Я хочу использовать другую технику, например, функцию обратного вызова в модели User или в контроллере.

Что ты предпочитаешь?

1 Ответ

1 голос
/ 07 марта 2019

default_scope - это то, что вам нужно, если вы не хотите изменять уже написанные запросы, но хотите добавить условие по умолчанию

class User < ActiveRecord::Base
  default_scope { where(is_active: true).where("age > 13") }
end

NOTE : *Не рекомендуется использовать 1008 *, поэтому сделайте свое исследование соответствующим образом

Решение 2:

Вам нужно будет добавить область один раз во все места, где вы запрашиваететаблицу пользователей

class User < ActiveRecord::Base
  scope :active, -> { where(is_active: true).where("age > 13") }
end

и использовать ее

User.active.where(...)

, возможно, вам придется справиться с вышеуказанными условиями при присоединении к моделям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...