2010-01-06 8 views
6

Esta es probablemente una pregunta tonta, pero parece que no puedo encontrar una buena respuesta. Quiero saber la mejor manera de referirme al modelo al que pertenece un objeto.Rieles: en referencia al modelo, el objeto pertenece a

Por ejemplo:

class User < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :users 
end 

Por lo tanto, para obtener los mensajes del usuario, que puede utilizar user.posts, pero para obtener el usuario del correo, no puedo hacer a la inversa: post.user

Si Agregué un método de "usuario" al modelo de publicación, funciona, pero no parece ser la mejor manera.

class Post < ActiveRecord::Base 
    belongs_to :users 

    def user 
    User.find(self.user_id) 
    end 
end 

Si nos fijamos en esta entrada del blog http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips como ejemplo, se puede ver que el autor utiliza post.user.username, que no funciona fuera de la caja, así como: include => [: usuario], que tampoco funciona, incluso con el método "usuario" en el modelo de publicación.

Sé que esto es rudimentario, así que gracias por su paciencia. Solo quiero saber la mejor manera de lograr esta relación.

Mi principal objetivo es escribir "encuentra" anidadas utilizando incluye, que se refieren al usuario de este modo:

post = Post.find (: todos,: include => [: Usuario])

Cuando pruebo esto, obtengo "ActiveRecord :: ConfigurationError: no se encontró la asociación llamada 'usuario'; ¿quizás lo deletreaste mal?"

Muchas gracias.

Respuesta

8

que soy un poco nuevo en los carriles, pero esto debería funcionar de forma automática ...

Ah - usted ha nombrado la clase padre en Post como belongs_to :users; pero como solo pertenece a un único usuario, Rails espera belongs_to :user (o, por supuesto, belongs_to :users, :class_name => "User").

Es decir:

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

debe hacer el trabajo.

+0

Gracias. Esta es oficialmente la pregunta más tonta que he hecho. No puedo creer que no haya visto eso. Me pregunto por qué incluso funciona si lo haces plural ... – Shagymoe

0

Pertenece a un modelo debe estar en singular. como

belongs_to :user 
Cuestiones relacionadas