Я столкнулся с проблемой изменения функциональности приложения и необходимости переписывать около 700 вызовов методов, которые теперь необходимо определить.
Я изучал, как default_scope
работает, и, как и большинство людей, нахожу, что это близко, но не совсем полезно для меня, потому что я не могу это легко переопределить.
В настоящее время rails предлагает заменить default_scope методом unscoped
. Проблема с unscoped
в том, что он полностью удаляет всю область, а не только область по умолчанию.
Мне очень хотелось бы получить информацию от гуру Rails / ActiveRecord по некоторым альтернативам.
Учитывая эту базовую желаемую функциональность ...
class Model < ActiveRecord::Base
...
belongs_to :user
...
default_scope where(:foo => true)
scope :baz, where(:baz => '123')
scope :sans_foo, without_default.where(:foo=>true)
...
end
Не могли бы вы / как вы могли бы создать метод, который мог бы удалить область действия по умолчанию, оставив при этом другую область видимости нетронутой? IE, в настоящее время, если вы используете ...
user.models.unscoped.where(something)
... это то же самое, что позвонить
Model.where(something)
Можно ли определить метод, который позволил бы вам вместо этого сделать что-то вроде этого ...
user.models.without_default.where(something)
... где результат по-прежнему будет доступен пользователю, но не будет включать область действия по умолчанию?
Я очень, очень признателен за любую помощь или предложения о том, как можно реализовать такую функциональность.