IIC2513-2018-2 / syllabus

Material y coordinación del curso
10 stars 4 forks source link

Setear id en relaciones belongsTo #20

Closed jerosalazar closed 6 years ago

jerosalazar commented 6 years ago

Teniendo de ejemplo un usuario dentro de una página que puede crear publicaciones y sabiendo que estas publicaciones tienen relación con el usuario que las crea (user.hasMany(posts), post.belongsTo(user)), ¿Como se puede implementar que al crear una publicación, esta guarde el id del usuario que la crea (supongo que tiene algo que ver con la variable currentUser)?

De la misma forma, si quiero crear un comentario en la publicación (comment.belongsTo(post), post.hasMany(comments)) ¿Como es posible entregarle al form de comentario el id de la publicación donde está siendo creado (en este caso no hay una variable como currentUser para darle al form)?

bmarinb commented 6 years ago

cuando defines las relaciones se crean los metodos user.addPost / addPosts que podrían servirte

raulmt commented 6 years ago

Lo que te respondió @bmarinb es bien acertado. Esos métodos que se crean por la relación tienen la gracia de automáticamente asignar la foreign key de la tabla. Así que user.addPost por ejemplo, sólo necesita los datos del post en cuestión, pues userId (suponiendo ese nombre de la clave foránea) se asignará al del user al cual le llamas ese método. Te recomiendo revisar la sección en cuestión de los docs de Sequelize.

Para los casos en que no hay un "current user" como tu segunda pregunta, recuerda que siempre necesitamos crear las circunstancias en el browser de manera que éste pueda generar los requests que deseamos. Para poder saber a qué post agregarle comentarios, necesitas que el request contenga esa información. Tienes varios lugares del request en donde podrías hacer esto, pero si quieres inspirarte en las prácticas más orientadas a REST que hemos estado usando, lo ideal es que la URL te indique a qué recurso ("la colección de comentarios del post id X") le quieres agregar un nuevo elemento (el comentario).

jerosalazar commented 6 years ago

Una última duda con respecto a belongsTo, si yo tengo comentarios, estos pertenecen al mismo tiempo a un usuario y a un post. ¿Como puedo manejar la creación del comentario para que guarde ambas relaciones si solo puedo ocupar uno de los modelos mencionados para crearlo (user.addComment or post.addComment)?

jerosalazar commented 6 years ago

Ya cache que puedo pasarle un input hidden con el valor del id del user, luego crearlo a través del post 👍