ruby on rails - references - Crear relaciones cuando los andamios.
scaffold controller rails (2)
Hola soy nuevo en Ruby on Rails. Estoy tratando de crear un pequeño blog. Tengo dos tablas de Publicaciones y Comentarios. Cada publicación tendrá muchos comentarios. Yo genero las tablas usando estos comandos.
rails g scaffold Post title:string body:text author:string
rails g scaffold Comment body:string author:string
Ahora quiero agregar la relación a las clases modelo. Añado has_many :comments
a la clase belongs_to :title
y belongs_to :title
a la clase Comentario. Sin embargo, cuando trato de llamar a post.comments
, post.comments
un error de tiempo de ejecución que dice SQLException: no such column: comments.post_id
. ¿Debo crear una migración y agregar post_id en Comentario o hay alguna forma de lograr esto cuando se realiza un andamio?
Definitivamente estás en el camino correcto. Si agrega la columna post_id
al generar el andamio de Comment
su relación funcionará (aunque todavía necesita agregar has_many :comments
y belongs_to :post
)
Así que la llamada al generador actualizado se vería así:
rails g scaffold Comment body:string author:string post_id:integer
Scaffold en realidad proporciona una forma de generar relaciones, debe usar el tipo de datos :references
rails g scaffold Comment body:string author:string post:references
Esto generará una migración para la tabla de comentarios con un campo post_id e índice para ella. El generador también agregará belongs_to :post
en el modelo de comentario.
Sin embargo, no generará el reverso de la relación, por lo que deberá agregar
has_many :comments
para el modelo de correos usted mismo. También necesitará agregar enrutamiento de recursos anidados si esto es algo que necesita ya que el generador no puede manejar esto.