IIC2143-2020-2 / syllabus

Syllabus de IIC2143 Ingeniería de Software 2020-2
35 stars 10 forks source link

Asociaciones Error Couldn't find Service with 'id'=1 [WHERE "services"."user_id" = $1] #211

Closed RonaldoSosa closed 4 years ago

RonaldoSosa commented 4 years ago

Hola!Tengo un problema respecto al tema de asociaciones lo que pasa es que, tengo tres modelos los cuales son user,creado con devise, service y comment los cuales no fueron creados con devise, de los cuales entre user y service tienen una relacion de 1-N y lo mismo para user y comment, y service y comment ; agregué las asociaciones dentro de los modelos correspondientes e intente crear un formulario dentro de la vista show del modelo service para agregar un comentario , me base en el ejemplo visto en https://guides.rubyonrails.org/getting_started.html , sin embargo al hacer esto me arroja el siguiente error:

Captura de pantalla (465)

Y en la consola se ve así

Captura de pantalla (456)

Aqui adjunto una imagen del formulario para comment, su controlador y sus columnas:

Captura de pantalla (457) Captura de pantalla (466) Captura de pantalla (467) Captura de pantalla (468)

Para estar seguro de si los argumentos ingresados eran suficientes para crear el comentario lo intente hacer desde la consola, con el comando rails console, y logré crear un comentario desde ahí:

Captura de pantalla (464) Por lo cual no se exactamente donde esta el problema que provoca este error.

meretamal commented 4 years ago

Hola 😁 !!

En ves que ejecutar:

@service = current_user.services.find(params[:service_id])

intenta con:

@service = Service.find(params[:service_id])
RonaldoSosa commented 4 years ago

Funcionó!Muchas gracias!!! Pero me quedo la duda cuál es la diferencia entre:
@service = current_user.services.find(params[:service_id]) y @service = Service.find(params[:service_id])?

meretamal commented 4 years ago

Cuando tú corres current_user.services, si es que tienes alguna asociación entre estos modelos, rails se encargará de buscar a todos los servicios que tengan user_id igual al id del current_user. Al agregar .find, haces que se busque, no entre todos los servicios, si no que entre los servicios asociados al usuario, lo cual te levantaba un error, ya que no encontraba ni uno con id=1.

Al poner Service.find haces que se busque el servicio con ese id entre todos los servicios existentes.

RonaldoSosa commented 4 years ago

Yaaa me quedo claro!!!!Gracias de nuevo!!!!