Come evitare nullo con un cercatore dinamica quando un attributo si presenta come nullo?
-
15-10-2019 - |
Domanda
link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar'
E nel controller:
Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])
Tuttavia, se il controller riceve solo [:attr1]
ho un nullo.
Soluzione
cercatori dinamici non può essere la strada giusta da percorrere se alcuni dei cercatori non sono effettivamente presenti. In questo caso, si è probabilmente meglio utilizzare Article.find(:all, :conditions => {})
on Rails 2 e Article.where()
on Rails 3.
Ecco un metodo che mi è venuta per un'altra domanda un po 'indietro:
conditions = [:attr1, :attr2].inject({}) do |hsh, field|
hsh[field] = params[field] if params[field] && params[field].present?
hsh
end
# Rails 2
@articles = Article.find(:all, :conditions => conditions)
# Rails 3
@articles = Article.where(conditions)
Nel caso di cui sopra, si sarebbe ciclo su tutti i campi di array e aggiungere ogni uno di loro per l'hash risultante se è in e non vuoto in params
. Poi, si passa l'hash al Finder, e va tutto bene e dandy.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow