params sanitizer error

20 views
Skip to first unread message

fugee ohu

unread,
Jun 13, 2017, 9:07:24 PM6/13/17
to Ruby on Rails: Talk
ActionController::ParameterMissing in CommentsController#new

param is missing or the value is empty: comment

class CommentsController < ApplicationController


  def comment_params
    params.require(:comment).permit(:comment, :commentable_id, :commentable_type)
  end


Walter Lee Davis

unread,
Jun 13, 2017, 9:10:56 PM6/13/17
to rubyonra...@googlegroups.com
What does the form look like that sends to this controller?

Walter

>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/a7beac71-d952-4b4d-ae2c-15f3a0f444c3%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

fugee ohu

unread,
Jun 13, 2017, 9:18:21 PM6/13/17
to Ruby on Rails: Talk

<%= link_to 'Comment', new_comment_path(commentable_type: 'post', commentable_id: commentable.id) %>


Since the form never rendered I'm not sure if I should include it here 

Walter Lee Davis

unread,
Jun 13, 2017, 9:23:18 PM6/13/17
to rubyonra...@googlegroups.com
Since I asked specifically for the form, that's what I need to see. The critical part will be the first line: <%= form_for ...

The link you posted here is just to get the form to display, but the error you asked about initially comes from the way that the form is constructed -- specifically just how the parameters are set up in the form request that it will submit.

Walter

>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c5404141-69fe-4676-80d2-159bc96fab14%40googlegroups.com.
Message has been deleted

Walter Lee Davis

unread,
Jun 13, 2017, 9:32:57 PM6/13/17
to rubyonra...@googlegroups.com
Aha. I see what the problem could be. Your new method is trying to load a set of params, which is not the way this is usually done. Traditionally, the #new method is a GET request, which loads a generic form built around an empty new object. Since you are trying to set up the relationship with the commentable polymorphic object, maybe you should use a nested route to send that to the controller, or have a separate strong parameters accessor just for this form. You're sending the parameters as bare querystring options in the link helper, not nesting them into the comment object, which is why your accessor is failing you. If you changed the link to be

new_comment_path( 'comment[commentable_type]': 'post', 'comment[commentable_id]: commendable.id)

...then your existing accessor will work, but that's a lot of typing when you could probably do this a lot easier with nested routes.

Walter

>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c5404141-69fe-4676-80d2-159bc96fab14%40googlegroups.com.

fugee ohu

unread,
Jun 13, 2017, 9:35:44 PM6/13/17
to Ruby on Rails: Talk
<%= form_for @comment do |f| %>  
  <%= f.hidden_field :commentable_id, value: commentable.id %>
  <%= f.hidden_field :commentable_type, value: commentable.type %>
  <div class="field form-group">
    <%= f.text_area :comment, class: 'form-control' %>
  </div>
  <div class="field form-group">
    <%= submit_tag "Post comment", class: 'btn btn-primary' %>
  </div>
<% end %>   

fugee ohu

unread,
Jun 13, 2017, 9:40:03 PM6/13/17
to Ruby on Rails: Talk
Nested on the non-existent commentable ? 

Walter Lee Davis

unread,
Jun 13, 2017, 9:44:21 PM6/13/17
to rubyonra...@googlegroups.com
The commentable had better exist at this point, otherwise, what are you putting in the type and ID attributes? This is a polymorphic relationship, commentable is meant to stand in for whatever -- Article, Image, BlogPost -- whatever you want to comment on. For the link you posted in the second message to this thread to work at all, you must already have persisted that *whatever* object, and that is what the commentable will be in this context.

Walter

>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/9c2fc223-8335-4992-8df3-e7a11b452ef2%40googlegroups.com.

fugee ohu

unread,
Jun 13, 2017, 10:39:25 PM6/13/17
to Ruby on Rails: Talk
But there's  no commentable model

Walter Lee Davis

unread,
Jun 13, 2017, 10:47:26 PM6/13/17
to rubyonra...@googlegroups.com
Who wrote this code? Have you read the Rails Guide on Polymorphic Associations? http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
Please start there.

Walter

> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/367a144f-26d2-471a-bbb8-5ba669f2f0a6%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages