params sanitizer error

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

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

What does the form look like that sends to this controller?

Walter

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

http://localhost:3000/comments/new?commentable_id=13&commentable_type=post

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

>
> 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
>
>

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.

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

http://localhost:3000/comments/new?commentable_id=13&commentable_type=post

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

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

>
> 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
>
>

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.

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

http://localhost:3000/comments/new?commentable_id=13&commentable_type=post

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

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

<%= form_for @comment do |f| %>

<%= f.hidden_field :commentable_id, value: commentable.id %>

<%= f.hidden_field :commentable_type, value: commentable.type %>

<%= f.text_area :comment, class: ‘form-control’ %>

<%= submit_tag “Post comment”, class: ‘btn btn-primary’ %>

<% end %>

Nested on the non-existent commentable ?

>
>
>
>
> >
> > 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
> >
> >
>
> 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.
>
>
> <%= link_to 'Comment', new_comment_path(commentable_type: 'post', commentable_id: commentable.id) %>
>
> http://localhost:3000/comments/new?commentable_id=13&commentable_type=post
>
> Since the form never rendered I'm not sure if I should include it here

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.
> For more options, visit https://groups.google.com/d/optout.

Nested on the non-existent commentable ?

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

But there’s no commentable model

>
>
>
>
> >
> >
> >
> >
> > >
> > > 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
> > >
> > >
> >
> > 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.
> >
> >
> > <%= link_to 'Comment', new_comment_path(commentable_type: 'post', commentable_id: commentable.id) %>
> >
> > http://localhost:3000/comments/new?commentable_id=13&commentable_type=post
> >
> > Since the form never rendered I'm not sure if I should include it here
>
> 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.
> > For more options, visit https://groups.google.com/d/optout.
>
>
> Nested on the non-existent commentable ?

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.
> For more options, visit https://groups.google.com/d/optout.

But there's no commentable model

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