Я недавно начала стажировку. Мой работодатель использует Ruby on Rails, и я часто сталкиваюсь с новым синтаксисом, который мне нужно найти, чтобы понять. Я искал в Google хорошее объяснение named_scope, но до сих пор я нашел в основном сообщения в блогах, в которых его высоко оценивают, а не прямое определение или введение.
Что именно называется named_scope (теперь называемым просто областью видимости) в Ruby on Rails?
ruby-on-rails
named-scope
Зигги
источник
источник
Ответы:
Область видимости - это подмножество коллекции. Звучит сложно? Это не так. Представьте себе это:
У вас есть пользователи. Теперь некоторые из этих пользователей подписаны на вашу рассылку новостей. Вы отметили тех, кто получает информационный бюллетень, добавив поле в базу данных пользователей (user.subscribed_to_newsletter = true). Естественно, иногда вы хотите получить тех пользователей, которые подписаны на вашу рассылку.
Конечно, вы всегда можете сделать это:
Однако вместо того, чтобы всегда писать это, вы можете сделать что-то вроде этого.
Если вы используете Rails 4 или новее , сделайте это:
Это позволяет вам получить доступ к своим подписчикам, просто выполнив следующие действия:
Это очень простой пример, но в целом области могут быть очень мощными инструментами, облегчающими вашу работу.
Проверьте эту ссылку: Описание API
источник
scope
синтаксис намного чище, вы получите тот же результат, но всего с одной строчкойобласть в активной записи похожа на методы класса, но они возвращают объект отношения, что означает, что вы можете вызвать другую область или метод запроса активной записи для нее.
Например, если у вас есть модель зомби (таблица зомби) с указанными ниже методами области видимости,
И ты звонишь
Это переводится в SQL ниже,
Пример выше основан на синтаксисе rails 4
источник
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderЛучший способ разобраться в деталях - обратиться к документации по API.
Вы получите полную информацию о том, как мы можем использовать Scopes.
Документация API по объему
источник
Зачем их использовать?
Область действия позволяет вам указывать часто используемые запросы (это можно рассматривать как ярлык для длинных или наиболее часто используемых запросов), на которые можно ссылаться как на вызовы методов для объектов или моделей ассоциации. С этими областями действия вы можете использовать все ранее описанные методы, такие как where, joins и includes. Все методы области будут возвращать объект ActiveRecord :: Relation, который позволит вызывать для него дополнительные методы (например, другие области).
Чтобы определить простую область видимости, мы используем метод области видимости внутри класса, передавая запрос, который мы хотели бы запустить при вызове этой области:
Это в точности то же самое, что и определение метода класса, и то, что вы используете, зависит от личных предпочтений:
Пожалуйста, перейдите по следующей ссылке для полного описания с примером. Я надеюсь, что это поможет вам.
http://guides.rubyonrails.org/active_record_querying.html
источник
nil
в нескольких случаях и, следовательно, не могут быть объединены в цепочку для определенных условий.А теперь представьте себя:
Вы можете получить эти конкретные классы людей, используя прицел!
Теперь это было не так уж сложно, правда?
источник