Я сталкиваюсь с проблемой изменения функциональности приложения и необходимости переписать около 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)
... где результат все еще будет виден пользователю, но не будет включать область по умолчанию?
Я очень, очень признателен за любую помощь илипредложения о том, как такая функциональность может быть реализована.