Soy nuevo en Rails. Empecé a trabajar en un POC.

Mi código de controlador está abajo:

  @xyz = if params[:id].present?
           if params[:mobile_number].present?
             Seeker.where("id = ? and mobile_number = ?" , params[:id], params[:mobile_number])                    
           else                    
             Seeker.where("id = ?", params[:id])
           end
         elsif params[:seekerid].present?
           Seeker.where("mobile_number = ?" , params[:mobile_number])
         else
           Seeker.where(nil);
         end

Pero no creo que sea un buen enfoque. Tenga en cuenta que si tengo muchos parámetros, poner la condición present? y luego formar una consulta se volvería complejo. ¿O puedo formar una consulta por separado y luego colocarla en la condición where como variable de instancia?

¿Cuál es el mejor enfoque?

-1
samash 9 may. 2019 a las 21:10

3 respuestas

La mejor respuesta

Puede agregar declaraciones where de forma incremental cuando cada parámetro está presente:

@xyz = Seeker.scoped
@xyz = @xyz.where(id: params[:id]) if params[:id].present?
@xyz = @zyx.where(mobile_number: params[:mobile_number]) if params[:mobile_number].present?

Un enfoque más limpio podría ser mover esa lógica a algún alcance o método de clase en el modelo Seeker.

4
arieljuod 9 may. 2019 a las 19:05

Hola, I am new to Rails

Si está utilizando la búsqueda de un proyecto pequeño, una base de datos pequeña, puede utilizar el scope , y mira la respuesta de arieljuod. Pero si desea que su función de búsqueda sea más rápida, profunda, ... puede encontrar algunas gemas:

Y hay muchas otras formas increíbles con Ruby on Rails.

Feliz codificación !!!

0
Dapeng114 10 may. 2019 a las 04:33

Si desea encontrar un registro basado en cada parámetro que viene y tiene valor, esa es la mejor manera de usarlo.

params = {id: nil, mobile_number: "98XXXXXX12" }
Seeker.where(params.compact)

compact eliminará el valor nil de los parámetros y lo encontrará directamente con el parámetro existente.

NOTA: eliminará solo el valor nulo no la "" cadena en blanco

0
Ketan Mangukiya 10 may. 2019 a las 07:25