Wrong number of arguments error with has_many :through association and form

Wrong number of arguments error with has_many :through association and form

我有三个相关模型使用 has_many :through 如下所示。用户应该能够 select 关注(除了保险、患者性别、偏好性别和写便条)并创建转诊请求。当我尝试提交推荐申请表时,出现参数数量错误的错误,如该屏幕截图所示。

Screenshot of Error

我知道这一定与我如何将我的参数列入白名单有关,并且尝试了很多不同的变体,但似乎无法获得正确的语法(或其他)。任何帮助将不胜感激。

来自推荐请求控制器:

  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

我的推荐申请表

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

推荐请求模型

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

关注模型

class Concern < ApplicationRecord
    has_many :referral_request_concerns
    has_many :referral_requests, through: :referral_request_concerns
end

ReferralRequestConcern 模型

class ReferralRequestConcern < ApplicationRecord
    belongs_to :referral_request
    belongs_to :concern
    validates :referral_request_id, presence: true
    validates :concern_id, presence: true
end

以下是创建操作的输出和相关的错误日志,将 :concern_ids [] 更改为 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) 
def referral_request_params
    params.require(:referral_request).permit(:content, :patient_gender_id, 
        :preferred_gender_id, :insurance_id, concern_ids: [])

end

(concern_ids: [] 而不是 :concern_ids [])