Recentemente comecei um estágio. Meu empregador usa ruby on rails e freqüentemente encontro uma nova sintaxe que preciso pesquisar para entender. Pesquisei no Google por uma boa explicação sobre named_scope, mas o que descobri até agora são principalmente postagens de blog elogiando isso, em vez de uma definição ou introdução direta.
O que exatamente é named_scope (agora simplesmente chamado de escopo) no Ruby on Rails?
ruby-on-rails
named-scope
Ziggy
fonte
fonte
Respostas:
Um escopo é um subconjunto de uma coleção. Parece complicado? Não é. Imagina isto:
Você tem usuários. Agora, alguns desses usuários estão inscritos em sua newsletter. Você marcou aqueles que recebem um boletim informativo adicionando um campo ao Banco de dados de usuários (user.subscribed_to_newsletter = true). Naturalmente, às vezes você deseja obter os usuários que estão inscritos no seu boletim informativo.
Você poderia, é claro, sempre fazer isso:
Em vez de sempre escrever isso, você poderia, entretanto, fazer algo assim.
Se você estiver usando Rails 4 ou mais recente , faça o seguinte:
Isso permite que você acesse seus assinantes simplesmente fazendo o seguinte:
Este é um exemplo muito simples, mas em geral os escopos podem ser ferramentas muito poderosas para facilitar o seu trabalho.
Confira este link: Descrição da API
fonte
scope
sintaxe é muito mais limpa, você obtém o mesmo resultado, mas com apenas uma linhaO escopo no registro ativo é como os métodos de classe, mas eles retornam o objeto Relation, o que significa que você pode chamar outro escopo ou método de consulta do registro ativo nele.
Por exemplo, se você tiver um modelo Zombie (tabela de zumbis) com os métodos de escopo mencionados abaixo,
E você liga
Isso se traduz no seguinte em SQL,
O exemplo acima é baseado na sintaxe do rails 4
fonte
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderA melhor maneira de entender os detalhes é consultar a documentação da API.
Você obterá os detalhes completos e as maneiras como podemos usar escopos.
Documentação de escopo da API
fonte
Por que usá-los?
O escopo permite que você especifique consultas comumente usadas (pode ser considerado como um atalho para consultas longas ou usadas com mais frequência) que podem ser referenciadas como chamadas de método nos objetos de associação ou modelos. Com esses escopos, você pode usar todos os métodos cobertos anteriormente, como onde, junta e inclui. Todos os métodos de escopo retornarão um objeto ActiveRecord :: Relation que permitirá que outros métodos (como outros escopos) sejam chamados nele.
Para definir um escopo simples, usamos o método de escopo dentro da classe, passando a consulta que gostaríamos de executar quando este escopo for chamado:
Isso é exatamente o mesmo que definir um método de classe, e o que você usa é uma questão de preferência pessoal:
Siga o seguinte link para uma descrição completa com exemplo. Eu espero que isso te ajude.
http://guides.rubyonrails.org/active_record_querying.html
fonte
nil
em alguns casos e, portanto, não podem ser encadeados em certas condições.Agora imagine você:
Você pode obter essas classes específicas de pessoas usando um escopo!
Agora não foi tão difícil, foi?
fonte