2011-03-06 11 views
6

No creo que haya una diferencia cuando se trata de registro activo y búsqueda de datos.Diferencia entre Encontrar y Dónde con las Relaciones

Éstos son mis modelos

class User < ActiveRecord::Base 
    has_many :shows 
end 

class Show < ActiveRecord::Base 
    belongs_to :user 
end 

Cuando uso la consola rieles que pueda hacer lo siguiente y funciona.

u = User.find(1) 
u.shows 

Me da todos los espectáculos para ese usuario.

Sin embargo cuando lo haga

u = User.where("username = ?", "percent20") 
u.shows # this is doesn't work gives me a now instance error 

me sale el mismo usuario y la información pertinente, pero no la relación. El único problema que puedo ver es que tal vez estoy haciendo algo mal porque hay alguna diferencia entre dónde y encontrar.

Cualquier ayuda es apreciada.

Respuesta

10

El problema no es la relación.

u = User.find(1) 

devuelve uno de los usuarios

tipo
#return a Set of users. In your case its only one user. 
u = User.where("username = ?", "percent20") 

El resultado es ActiveRecord :: Relation -> [usuario, usuario, usuario]

uso, por ejemplo, primero en obtener el primer usuario

#returns the first user 
u = User.where("username = ?", "percent20").first 

u.class.name => "Usuario"

+1

me siento muy tonto después de leer esto. Lo sabía, grrrrrrr. Estoy marcando esto como la respuesta debido a la verbosidad de la respuesta. Gracias por todas las respuestas. – percent20

5

User.find (1) está recuperando un registro específico con su ID, mientras que User.where ("username =?", "Percent20") está recuperando el conjunto de registros que coinciden con la condición.

Probar:

u = User.where("username = ?", "percent20").first 
u.shows 
3

El donde es método que devuelve una matriz de objetos. Por lo tanto, en su caso, pruebe

u.each { |user| user.shows } 
Cuestiones relacionadas