Por padrão, o Ransack autoriza a pesquisa e a ordenação em todos os campos do modelo e não autoriza quaisquer escopos de classe. No entanto, podemos personalizar essa autorização usando quatro métodos específicos que podem ser redefinidos em nossos modelos: ransackable_attributes, ransackable_associations, ransortable_attributes e ransackable_scopes. Vamos explorar como podemos utilizar esses métodos para controlar precisamente quais operações de pesquisa e ordenação são permitidas em nossa aplicação.
Permitindo ou Negando Operações de Pesquisa
O método ransackable_attributes determina quais atributos de um modelo podem ser usados para pesquisa. Por padrão, ele retorna todos os nomes de colunas do banco de dados e quaisquer ransackers definidos. Esse método pode ser redefinido para permitir apenas pesquisas em determinados campos.
def ransackable_attributes(auth_object = nil)
%w[name email] # Apenas 'nome' e 'email' são permitidos para pesquisa
end
No exemplo, apenas os campos nome e email podem ser usados para pesquisa.
Controlando as Associações Permitidas
O método ransackable_associations determina quais associações de um modelo podem ser usadas para pesquisa. Por padrão, ele retornas os nomes de todas as associações definidas no modelo. Podemos redefinir as associações através desse método.
def ransackable_associations(auth_object = nil)
%w[posts] # Apenas 'posts' pode ser usado para pesquisa
end
No exemplo, apenas as associações posts podem ser usadas para pesquisa.
Permitindo ou Negando a Ordenação
O método ransortable_attributes determina quais atributos de um modelo podem ser usados para ordenação. Por padrão, ele retorna os mesmos atributos definidos em ransackable_attributes. Podemos redefinir esse método para permitir ou negar a ordenação em determinados atributos.
def ransortable_attributes(auth_object = nil)
%w[name email] # Apenas 'nome' e 'email' podem ser usados para ordenação
end
No exemplo, apenas os campos nome e email podem ser usados para ordenação.
Controlando os Escopos Autorizados
O método ransackable_spoces determina quais escopos de classe (método de classe) de um modelo podem ser usados para pesquisa. Por padrão, ele retorna uma lista vazia, o que significa que nenhum escopo de classe está autorizado. Podemos redefinir esse método para permitir ou negar a pesquisa em determinados escopos de classe.
def ransackable_scopes(auth_object = nil)
[:active] # Apenas o escopo 'ativo' pode ser usado para pesquisa
end
Isso significa que apenas o escopo de classe active do modelo pode ser usado em operações de pesquisa.
Conclusão
Ao personalizar esses métodos em nossos modelos Rails, podemos controlar precisamente quais operações de pesquisa e ordenação são permitidas em nossos modelos. Isso nos dá maior flexibilidade e segurança ao lidar com consultas em nossas aplicações, garantindo que apenas as operações autorizadas sejam executadas em campos e associações específicas.
Sabia Mais
- Ransack Documentation: Authorization (allowlisting/denylisting)