¡Afortunadamente, esto es bastante simple de lograr en Rails!
Hay algunos componentes en juego, y sospecho que tienes la mayoría de ellos en su lugar, pero los revisaré de todos modos.
La primera es que necesitará tener una has_many
/ belongs_to
entre sus dos modelos, belongs_to
Post
y Comment
ya que eso es lo que usó en su pregunta. (Esta sintaxis es compatible con Rails 4.2.x, creo que la sintaxis de Rails 5 es ligeramente diferente, pero el método general es el mismo)
- ¿Qué lenguajes de programación alguna vez fueron emocionantes y esenciales pero ahora se están desvaneciendo?
- Cómo optimizar un complemento personalizado de WordPress
- ¿Hay alguna posibilidad de tomar un sitio de redes sociales como una startup?
- ¿Cómo puedo hacer que una página de inicio de WordPress sea estática?
- ¿Por qué los desarrolladores web usan TypeScript o CoffeeScript sobre JavaScript nativo?
# /app/models/post.rb
clase Publicar <ActiveRecord :: Base
has_many: comentarios
fin
# /app/models/comment.rb
clase Comentario <ActiveRecord :: Base
belong_to: post
fin
Asegúrese de que sus tablas estén configuradas correctamente (su tabla de comments
debe tener un campo post_id (integer)
) y que se ejecuten todas las migraciones.
Ahora en su archivo routes.rb
, configure un recurso anidado:
# /config/routes.rb
Rails.application.routes.draw do
recursos: las publicaciones hacen
recursos: comentarios
fin
fin
Tenga en cuenta que si necesita bloquear alguna de las acciones (por ejemplo, restringir las acciones de destroy
o algo así) puede hacerlo de manera normal, aunque no se refleja en este ejemplo.
Cuando ejecuta rake routes
, ahora debería ver un resultado que incluye:
post_comments GET /posts/:post_id/comments(.:format) comments # index
POST /posts/:post_id/comments(.:format) comentarios # create
new_post_comment GET /posts/:post_id/comments/new(.:format) comentarios # nuevo
post_comment GET /posts/:post_id/comments/:id(.:format) comentarios # show
PATCH /posts/:post_id/comments/:id(.:format) comments # update
Tenga en cuenta que aunque se puede acceder al recurso a través de una ruta diferente a la normal, todavía se hace referencia al mismo CommentsController
. En su new
acción, por ejemplo, puede hacer referencia a :post_id
través del hash de params[:post_id]
( params[:post_id]
).
¡Espero que esto ayude!