¿Cómo evito nula con un buscador dinámico cuando un atributo viene como nula?
-
15-10-2019 - |
Pregunta
link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar'
Y en el controlador:
Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])
Sin embargo, si el controlador recibe solamente [:attr1]
consigo un nulo.
Solución
buscadores dinámicos no puede ser el camino correcto a seguir si algunos de los buscadores no están realmente presentes. En este caso, es probable que mejor usar Article.find(:all, :conditions => {})
en los carriles 2 y Article.where()
on Rails 3.
Aquí hay un método que se me ocurrió para otra pregunta hace un tiempo:
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)
En el caso anterior, debería bucle sobre todos los campos de la matriz, y poner cada uno de ellos para el hash resultante si es en y se vacía en params
. A continuación, se pasa el hash para el buscador, y todo está bien y dandy.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow