Carriles: referencia de nuevo a modelar el objeto pertenece a
-
19-09-2019 - |
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.
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