Reputation: 289
I have three models related using has_many :through as seen below. The user should be able to select concerns (in addition to insurance, patient gender, preferred gender, and writing a note) and create a referral request. When I try to submit the referral request form I get a wrong number of arguments error as seen in this screenshot.
I know this must have something to do with how I am whitelisting my params and have tried a lot of different variations but can't seem to get the syntax (or something else) right. Any help would be greatly appreciated.
From Referral Requests Controller:
def create
@referral_request = current_user.referral_requests.build(referral_request_params)
if @referral_request.save
flash[:success] = "Referral Request Created!"
render 'referral_requests/index'
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
end
private
def referral_request_params
params.require(:referral_request).permit(:content, :patient_gender_id,
:preferred_gender_id, :insurance_id, :concern_ids [])
end
end
my referral request form
<%= form_for(@referral_request) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<% Concern.all.each do |concern| %>
<%= check_box_tag "referral_request[concern_ids][]", concern.id %>
<%= concern.name %><br>
<% end %>
<%= f.text_area :content, placeholder: "Compose new referral request..." %>
<%= collection_select( :referral_request, :patient_gender_id, Gender.all, :id, :name, prompt: true) %>
<%= collection_select( :referral_request, :preferred_gender_id, Gender.all, :id, :name, prompt: true) %>
<%= collection_select( :referral_request, :insurance_id, Insurance.all, :id, :name, prompt: true) %>
</div>
<%= f.submit "Post", class: "btn btn-primary" %>
<% end %>
Referral Request Model
class ReferralRequest < ApplicationRecord
belongs_to :user
has_many :referral_request_concerns
has_many :concerns, through: :referral_request_concerns
default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
validates :content, presence: true, length: { minimum: 20 }
validates :patient_gender_id, presence: true
validates :preferred_gender_id, presence: true
validates :insurance_id, presence: true
end
Concern Model
class Concern < ApplicationRecord
has_many :referral_request_concerns
has_many :referral_requests, through: :referral_request_concerns
end
ReferralRequestConcern Model
class ReferralRequestConcern < ApplicationRecord
belongs_to :referral_request
belongs_to :concern
validates :referral_request_id, presence: true
validates :concern_id, presence: true
end
Here is the output of the create action and associated error log after changing :concern_ids [] to concern_ids: []
Started POST "/referral_requests" for ::1 at 2017-06-27 15:01:54 -0400
Processing by ReferralRequestsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9gd2J+PB6R1jRkpwIlJ8KNlFBdxoFuZ5W2c1NAL1aiBv7mhrKT7ITBtxZPd9jpJ49UAGpc4/4jOpAbrlenG91A==", "referral_request"=>{"concern_ids"=>["1", "2", "3", "4"], "content"=>"dsdfsdsdsfggfdsgfdfgdsgfdfgsdgfsdgfdsgfdgfd", "patient_gender_id"=>"2", "preferred_gender_id"=>"2", "insurance_id"=>"16"}, "commit"=>"Post"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
Concern Load (0.2ms) SELECT "concerns".* FROM "concerns" WHERE "concerns"."id" IN (1, 2, 3, 4)
(0.1ms) begin transaction
(0.1ms) rollback transaction
Rendering static_pages/home.html.erb within layouts/application
Rendered static_pages/home.html.erb within layouts/application (1.7ms)
Rendered layouts/_shim.html.erb (0.7ms)
Rendered layouts/_header.html.erb (1.6ms)
Rendered layouts/_footer.html.erb (1.1ms)
#<ActiveModel::Errors:0x007f8c2a399d70 @base=#<ReferralRequest id: nil, content: "dsdfsdsdsfggfdsgfdfgdsgfdfgsdgfsdgfdsgfdgfd", insurance: nil, user_id: 1, created_at: nil, updated_at: nil, insurance_id: 16, patient_gender_id: 2, preferred_gender_id: 2>, @messages={:referral_request_concerns=>["is invalid"]}, @details={:referral_request_concerns=>[{:error=>:invalid}, {:error=>:invalid}, {:error=>:invalid}, {:error=>:invalid}]}>
Completed 200 OK in 131ms (Views: 79.9ms | ActiveRecord: 1.0ms)
Upvotes: 0
Views: 561
Reputation: 994
def referral_request_params
params.require(:referral_request).permit(:content, :patient_gender_id,
:preferred_gender_id, :insurance_id, concern_ids: [])
end
(concern_ids: []
instead of :concern_ids []
)
Upvotes: 1