2011-04-06 13 views
5

Estoy intentando aprender RoR, creando mi primera aplicación, una aplicación de inventario básica. Intenté buscar pero no pude encontrar la sintaxis correcta, así que pensé en preguntar.Rails 3 - Buscar por nombre en lugar de id

Aquí es mi puesta a punto:

Modelo

class Item < ActiveRecord::Base 
belongs_to :supplier 

class Supplier < ActiveRecord::Base 
has_many :items 

Artículos controlador

@items = Item.find_all_by_supplier_id '1' 

Esto devolverá los datos que quiero, pero yo estaba esperando para introducir el nombre del proveedor en el Controlador, de modo que si la ID no coincide, seguirá funcionando correctamente.

Espero que sea suficiente información, gracias!

Respuesta

17

Se podría invertir su método poco y tratar:

@items = Supplier.find_by_name('THE NAME').items 

Rails crea find_by_ dinámica y métodos * * find_all_by_ para la búsqueda. En lugar de recuperar elementos con el provider_id, le recomiendo que deje que los rieles lo hagan por usted con las asociaciones que ha configurado como en el fragmento de código anterior. Internamente, esto todavía usa el supplier_id, pero los rieles están manejando el proceso en lugar de usted.

La inversa de esto también es posible, por lo que si usted tiene un tema y desea que el proveedor, que puede hacer:

Item.find(1).supplier 
+0

¡Gracias señor! Eso funcionó como un encanto. – rmp

0
@items = Item.joins(:suplier).where(:suplier => { :name => "Suplier name" }) 
0
Supplier.find_by_colname(params[:name]) 

Dónde colname es el nombre de Supplier table column en el que queremos verificar nuestro valor de parámetro En los rieles podemos simplemente agregar el nombre de la columna con el find_by_ como se muestra arriba y los rieles le mostrarán que es mágico;). Aquí está la referencia en Doc