Привет, как создать named_scope, который будет распространен для всех моделей.Как использовать общий named_scope для всех моделей ActiveRecord
ответ
я сделать это, поместив этот код в lib/has_common_named_scopes.rb
:
module HasCommonNamedScopes
def self.included(base)
base.class_eval {
# Named scopes
named_scope :newest, :order => "#{base.table_name}.created_at DESC"
named_scope :freshest, :order => "#{base.table_name}.updated_at DESC"
named_scope :limit, lambda { |limit| {:limit => limit} }
}
end
end
, а затем включить модуль в каждой модели, где они нужны мне:
class MyModel < ActiveRecord::Base
include HasCommonNamedScopes
Я бы рекомендовал использовать base.table_name
для квалифицируйте таблицу при обращении к столбцам в этих названных областях, как это делается в примере. В противном случае вы столкнетесь с проблемами с неоднозначными ссылками при объединении этих названных областей с другими областями, которые объединяются в другие таблицы.
Update:
scope
используется в Rails> 3 и named_scope
использовался в предыдущих версиях.
Существует также Thoughtbot's Pacecar, который добавляет кучу очень общих названных областей для каждой модели. Он может прийти с тем, что вы ищете. Если вам что-то нужно, то Casper Fabricius имеет правильную идею.
Для проекта Rails4 я достиг этого путем расширения ActiveRecord::Base
, класс все модели Rails наследуют от, в инициализатор (обезьяна ремонтного подход, берегитесь)
# in /config/initializers/shared_scope_initializer.rb
module SharedScopes
extend ActiveSupport::Concern
module ClassMethods
def named_scope
return where(attribute: value) # query here
end
end
end
ActiveRecord::Base.send(:include, SharedScopes)
- 1. Попытка определить named_scopes и другие отношения ActiveRecord для всех моделей
- 2. ActiveRecord named_scope, .scopes
- 3. J2ME общий api для всех моделей телефонов
- 4. ActiveRecord Global Callbacks для всех моделей
- 5. Использование named_scope с количеством дочерних моделей
- 6. Как извлечь общие named_scopes из моделей ActiveRecord
- 7. рельсы named_scope как расширение для AR :: Base
- 8. Обновление named_scope: все для нового формата ActiveRecord
- 9. Mongoose - Как создать общий метод для всех моделей?
- 10. ActiveRecord и получение неиспользуемых записей из отношений, find_by_sql или named_scope?
- 11. Изменить ActiveRecord ошибка пустое сообщение для всех моделей
- 12. Пользовательские проверки - для всех моделей
- 13. Как реализовать i18n/переводы для моделей ActiveRecord?
- 14. Rails использовать ActiveRecord, чтобы сделать общий выбор
- 15. Обзор модели - общий для двух разных моделей
- 16. Как сделать общий стол достаточно гибким для обслуживания двух моделей
- 17. Rails named_scope для нескольких таблиц
- 18. Общий идентификатор для нескольких моделей в Rails
- 19. новообращенный named_scope для рельсов 3
- 20. Rails 2.3: с помощью другой модели named_scope внутри другого named_scope
- 21. named_scope error on association_to
- 22. Использовать Loop для создания моделей для всех комбинаций порядка
- 23. Условные проверки Rails ActiveRecord для связанных моделей?
- 24. Как использовать общий класс для всех контроллеров представления uitabbarcontroller?
- 25. Кэш всех моделей в таблице
- 26. ActiveRecord запроса фильтрации вложенных моделей
- 27. activerecord найти условия для связанных моделей
- 28. Activerecord has_many: через несколько моделей
- 29. SQLAlchemy "event.listen" для всех моделей
- 30. Как указать атрибут, общий для всех заводов?