raw rails query not left joins inner create active ruby-on-rails where dynamic-finders

ruby on rails - query - Rails "find_all_by" vs ".where"



raw query ruby on rails (2)

Tengo el siguiente código:

def maturities InfoItem.find_all_by_work_order(self.work_order).map(&:maturity) end

Estaba pensando en cambiarlo a:

def maturities InfoItem.where(work_order: self.work_order).map(&:maturity) end

¿Habría alguna ventaja en esto? Parece que .where es más común que find_all_by hoy en día.


Creo que la principal ventaja es poder agregar criterios adicionales a donde, find_all_by se limita al campo del selector dinámico. Si solo tienes una condición por la que estás buscando, creo que es un lavado, pero cuando comienzas a agregar 3 o 4, los buscadores dinámicos pueden ser feos. Los hash son agradables a la vista, y podría pasar un hash de condiciones como parámetro si es necesario. Los buscadores dinámicos son geniales, pero creo que las escalas son más limpias y más legibles.


Mi opinión es que usar .where es un mejor enfoque.

Cuando utilice los buscadores basados ​​en atributos, tendrá que hacer un túnel a través de un método de llamada perdida y, finalmente, definir un método de clase, a través de class_eval , que devuelve su resultado. Este es un procesamiento adicional que puede que no necesite hacer.

Además, encadenando: find_by_this_and_this_and_this_and_this ... puede ponerse feo.

Vea cómo Rails logra los buscadores basados ​​en atributos aquí

Falta un método del módulo DynamicMatchers en github:

def method_missing(name, *arguments, &block) match = Method.match(self, name) if match && match.valid? match.define send(name, *arguments, &block) else super end end