Problema con creación de formulario

8 views
Skip to first unread message

Chr5

unread,
Jan 23, 2016, 11:21:10 AM1/23/16
to Tenerife RoR
¿Sigue vivo este grupo?
Sería estupendo, por que he retomado Ror y la verdad es que a penas conozco a nadie que me pueda echar una mano.
intento implementar una nueva funcionalidad en un 
proyecto que tengo desde hace año estancado, se trata de un simple formulario para creación de "comentarios". Soy bastante principante en esto, por eso que necesito ayuda. Gracias de antemano, les dejo lo que tengo en los diferentes archivos:

En el archivo routes.rb

   resources :comments

   resources :designs do  #he añadido esto por mi cuenta....
     resources :comments
   end

En el formulario de la vista del post (timeline/show.html.erb):

     <%= semantic_form_for ([@design, @design.comments.build]) do 
|formulario| %>  #Esto lo he sacado del mismo ejemplo de internet.... no 
acabo de entender.....
       <%= formulario.text_field :title %>
       <%= formulario.text_field :body %>
       <%= formulario.submit %>
     <% end %>


Archivo comments_controller.rb:

class CommentsController < ApplicationController

   def create
     @design = Design.find(params[:design_id])
     @user = current_user.id
     @comment = @design.comments.create(params[:comment])  #Haciendo 
esta llega el design_id, pero no el user_id.
     @comment = current_user.comments.create(params[:comment]) # Con 
esta línea, llega el user_id, pero no llega el design_id
     redirect_to timeline_path(@design)
   end
end


pd. Tampoco conozco la diferencia entre el método 
@design.comments.create() y el método @design.comments.new() pero 
alguien recomienda el último, lo probé y parece que no llega nada al a bbdd.

Cualquier tipo de ayuda u orientación lo agradezco,
Muchas gracias,
Carlos

Dmitry Polushkin

unread,
Jan 23, 2016, 12:49:58 PM1/23/16
to Tenerife.rb
Hi Carlos,

I think you need to checked comment record you just tried to create for a validation errors.

Best,
Dmitry

Ancor Cruz

unread,
Jan 25, 2016, 3:42:19 AM1/25/16
to tener...@googlegroups.com
Hola Carlos,

El grupo esta lleva bastante tiempo en letargo pero sigue vivo de alguna manera.

Primero que nada explicar la diferencia entre #new y #create; #new inicializa un nuevo objeto, en este caso de la clase Comments; #create además de inicializar el objeto lo intenta guardar en la base de datos ejecutando además #save.

En tu caso podrías escribir el método create del controlador como sigue:

 def create
     @design = Design.find(params[:design_id])
     @comment = @design.comments.new(params[:comment])
     @comment.user_id = current_user.id # si tienes la relación entre comment y user bien definida puedes escribir @comment.user = current_user 
     if @comment.save
       redirect_to timeline_path(@design)
     else
       # aqui defines que sucede si el guardado falla, en este caso he supuesto que la vista desde donde envías el formulario es 'new' siguiendo el estandar CRUD.
       render 'new'
     end
   end
Te recomiendo que leas las guías de Rails, son una documentación muy buena, ideales para empezar.


Un saludo.

--
Has recibido este mensaje porque estás suscrito al grupo "Tenerife.rb" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a tenerife-rb...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Ancor Cruz <anco...@gmail.com>

Personal Website: ancorcruz.com
Twitter: @ancorcruz

Chr5

unread,
Jan 28, 2016, 6:38:55 PM1/28/16
to Tenerife RoR
Muchas Gracias Dimitry y Ancor.
He conseguido crear el comentario, por fin ha llegado todo.

Estaría bien poder organizar alguna reunión en Tenerife, con el tema de realizar algunos ejercicios,
estoy necesitando a alguien que me eche una mano y me ayude a mejorar mi nivel de comprensión de rails.
¿Para cuando un kata?

Por otro lado, ¿me podrías explicar como puedo añadir un valor a @design.rank cuando creo un comentario?

Tengo algo así en la función create del controlador de comentarios:


  def create
    @design = Design.find(params[:design_id])
    @comment = @design.comments.new(comment_params)
    @comment.user = current_user
    points = 10
    @design.rank = 100 # intentando que comentar suponga 10 puntos en el rank
    @design.save


    if @comment.save
      redirect_to timeline_path(@design)
    else
      render "new"
    end
  end


   private
   def comment_params
        params.require(:comment).permit(:user_id, :design_id, :title, :body)
   end

No parece que sume, aunque tampoco me da error....no entiendo muy bien por que no suma,
cualquier aclaración, incluso cual es la forma "más apropiada" de hacerlo, también lo agradezco,
soy programador aficionado freelance, y me cuesta mucho avanzar....
gracias,
carlos

Reply all
Reply to author
Forward
0 new messages