Cómo crear una API de Rails que muestre una combinación de dos tablas, como mostrar la lista de comentarios para una publicación determinada

¡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)

# /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!

La creación de una relación entre dos tablas se trata en la Guía de rieles “Introducción”. Le recomiendo que lea toda la serie. Incluso sin relacionar los comentarios con las publicaciones, generalmente querrás relacionar a los usuarios con algo. Otro buen recurso es el Tutorial de Rails de Michael Hartl (gratuito para leer en línea).

¿Cómo se crea una API de Rails que muestra una combinación de dos tablas, como mostrar la lista de comentarios para una publicación determinada?

Estoy usando Rails para crear una API, pero tengo un problema que no sé cómo crear una relación entre 2 tablas como en el siguiente ejemplo:

Supongo que usa ActiveRecord. Entonces eche un vistazo aquí: precarga, Eagerload, incluye y se une | Blog BigBinary.

El resto es renderizar los datos.