2010-01-21 7 views
5

Tengo una relación en la que un puesto pertenece a la ciudad que pertenece inturn a un estado como:Obtención segundo modelo de nivel con los carriles de registro activo

class Post < ActiveRecord::Base 
    belongs_to :city 
end 
class City < ActiveRecord::Base 
    belongs_to :state 
end 

ahora quiero encontrar todos los mensajes junto con el de su ciudades y estados a los que pertenecen. Escribí la siguiente consulta para buscar las publicaciones en sus ciudades, pero sin ideas sobre cómo recuperar el estado correspondiente con la ciudad en el mismo buscador:

@post = Post.find: all,: include => [: ciudad]

Cualquier ayuda es apreciada.

Gracias.

Respuesta

9
Post.all(:include => { :city => :state }) 
4

Rails se encargará de esto, gracias a la relación belongs_to, esta información se obtiene automáticamente.

@posts = Post.find(:all) 

@posts ahora contiene la lógica para ir a buscar los city y city.state detalles para todos los puestos de devoluciones.

Si usted está planeando uso de todos estos detalles que debiera ellos deseosos de carga, con :include => { :city => :state } como Farrel y mckeed declaró.

Nota: a hacer que funcione al revés (y también se supone que define el buen comportamiento del modelo) se debe añadir la asociación has_many o has_one también. Vea el Association Basics Guide.

+0

Como explica su enlace, si va a acceder a todos los registros asociados, debe cargarlos ansiosamente con ': include' como en la respuesta de Farrel. De lo contrario, cuando recorres '@ publicaciones', cada vez que solicites la ciudad o el estado de la publicación, se realizará otra búsqueda de la base de datos, lo que dará lugar a un código mucho más lento. – mckeed

+0

Tiene toda la razón, gracias por señalar. He actualizado la respuesta con esta información. – Veger

Cuestiones relacionadas