Pregunta

Esta es probablemente una pregunta tonta, pero me parece que no puede encontrar una buena respuesta. Quiero saber la mejor manera de referirse de nuevo al modelo que pertenece un objeto.

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, puedo usar user.posts, pero para obtener el usuario del correo, no puedo hacer a la inversa: post.user

Si añado un método de "usuario" para el modelo Post, 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-rieles-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 de "usuario" en el modelo post

.

Sé que esto es rudimentaria, así que gracias por su paciencia. Sólo 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,: incluir => [: usuario])

Cuando intento esto, me sale "ActiveRecord :: ConfigurationError: Asociación llamado 'usuario' no se encontró, tal vez has escrito mal ¿verdad?"

Muchas gracias.

¿Fue útil?

Solución

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 debido a que sólo pertenece a un único usuario, rieles está esperando belongs_to :user (o, por supuesto, belongs_to :users, :class_name => "User").

Esto es:

class Post < ActiveRecord::Base
  belongs_to :user
end

debe hacer el trabajo.

Otros consejos

Pertenece a un modelo debe estar en singular. como

belongs_to :user
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top