jeudi 2 février 2017

Ruby on Rails - Create polymorphic comment through partial

I'm currently trying to implement polymorphic comments within my app, but I'm running into problems with converting my partial form.

I was following this tutorial, step-by-step-guide-to-polymorphic-associations-in-rails, but it didn't go over this section.

Mainly, I have an Image that is commentable, and a partial at the bottom to allow users to comment on the Image.

However, when submitting the form, it can't find the @commentable object as params[:id] and params[:image_id] are both nil.

I'm having problems understanding how I'm supposed to pass this information, as the partial knows this information, but the controller does not.

// images/show.html.erb

<div class="container comment-form" >
    <%= render 'comments/form', comment: @image.comments.build  %>
</div>

// comments/_form.html.erb

<%= bootstrap_form_for(comment) do |f| %>
  <%= f.text_area :message, :hide_label => true, :placeholder => 'Add a comment' %>
  <%= f.submit 'Reply', :class=> 'btn btn-default pull-right' %>
<% end %>

// comments_controller.rb

def create       
    @commentable = find_commentable
    @comment = @commentable.comments.build(comment_params) <<<<<

    respond_to do |format|
      if @comment.save
        format.html { redirect_to (comment_path @comment), notice: 'Comment was successfully created.' }
        format.json { render :show, status: :created, location: @comment }
      else
        format.html { render :new }
        format.json { render json: @comment.errors, status: :unprocessable_entity }
      end
    end
  end

Error on @comment = @commentable.comments.build(comment_params)

undefined methodcomments' for nil:NilClass`

I also noticed that there is no id in the request parameters.

Parameters:

{"utf8"=>"✓", "authenticity_token"=>"xxxxxx", "comment"=>{"message"=>"nice photo"}, "commit"=>"Reply"}

Thanks for your help.

Aucun commentaire:

Enregistrer un commentaire