1

Sorry for the messy post, my first time posting. I have been trying to get this collection submit to work, but every time I press create report button I have it goes back to the screen and puts out Unpermitted parameter: :hero_id in the rails server terminal.

Model

class Report < ApplicationRecord
  validates :subject, presence: true, length: { minimum: 6, maximum: 100 }
  validates :description, presence: true, length: { minimum: 10, maximum: 300 }

  belongs_to :requester
  has_and_belongs_to_many :heros
end

View/Form

<div class="container">
   <div class="row justify-content-center">
      <div class="col-10">
         <% if @report.errors.any? %>
         <h2>The following errors prevented the article from being saved</h2>
         <ul>
            <% @report.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
            <% end %>
         </ul>
         <% end %>
         <%= form_with(model: @report, class: "shadow p-3 mb-3 bg-dark rounded", local: true) do |f| %>
         <div class="form-group row">
            <%= f.label :subject, class: "col-2 col-form-label text-light" %>
            <div class="col-10">
               <%= f.text_field :subject, class: "form-control shadow rounded", placeholder: "Subject of Report" %>
            </div>
         </div>
         <div class="form-group row">
            <%= f.label :description, class: "col-2 col-form-label text-light" %>
            <div class="col-10">
               <%= f.text_area :description, rows: 10, class: "form-control shadow rounded", placeholder: "Description of Issue" %>
            </div>
         </div>
         <div class="form-group row">
            <%= f.label :hero, class: "col-2 col-form-label text-light" %>
            <div class="col-10">
               <%= f.collection_select(:hero_ids, Hero.all, :id, :hero_name, {prompt: "Select a Hero"}, {:required => true}) %>
            </div>
         </div>
         <div class="btn-toolbar p-2 mb-2 row justify-content-center">
            <%= f.submit class: "btn btn-primary" %>
         </div>
         <% end %>
      </div>
      <div class="mb-3">
         <%= link_to '[ Cancel and return to reports listing ]', reports_path, class: "text-info" %>
      </div>
   </div>
</div>

Controller

def report_params
    #byebug
 params.require(:report).permit(:subject, :description, hero_ids: [])
end

Console

(byebug) params.require(:report)
<ActionController::Parameters {"subject"=>"Test report", "description"=>"Test report", "hero_ids"=>"1"} permitted: false>
MarrixRed
  • 57
  • 6
  • Show your params as they appear in your server console. – jvillian Aug 18 '20 at 21:42
  • Those aren't params as they appear in your console. That is a `Report` instance. Also, please edit your console output into your original question. Code and other information in comments is not a good thing. – jvillian Aug 18 '20 at 22:17
  • Thanks for the tip. I think I added what you were requesting for. – MarrixRed Aug 18 '20 at 22:44
  • notice how it says `hero_ids` in the params sent over? If that is the field then change it to match that in the whitelisted parameters (`hero_id` => `hero_ids`) – Rockwell Rice Aug 18 '20 at 22:57
  • @RockwellRice - Need to convert `hero_id: []` to `hero_ids`, yes? `hero_ids: []` will still be incorrect. Also, why does the console read "Unpermitted parameter: :hero_id" when there is clearly no `hero_id` in the params? – jvillian Aug 18 '20 at 23:08
  • Yes, that's better. Although, it's often better to show a more complete output beginning with `Started GET`... (or whatever the HTTP verb might be). – jvillian Aug 18 '20 at 23:11
  • @RockwellRice - I changed over the fields to hero_ids and just received this instead. I updated the code above. Unpermitted parameter: :hero_ids – MarrixRed Aug 18 '20 at 23:32
  • Can you add the code for the entire form? There is something off about this setup. – Rockwell Rice Aug 18 '20 at 23:58
  • @RockwellRice - there you go. There is the form. – MarrixRed Aug 19 '20 at 00:11
  • You're permitting an array (`hero_ids: []`), but your params has a string (`hero_ids: "1"`). Try changing `hero_ids: []` to `:hero_ids` in your `permit` clause. – jvillian Aug 19 '20 at 00:12
  • omg, that was staring me in the face! thank you for help you two – MarrixRed Aug 19 '20 at 02:24

0 Answers0