2017-06-27 1 views
0

J'ai trois modèles liés utilisant has_many: through comme vu ci-dessous. L'utilisateur devrait être en mesure de sélectionner des préoccupations (en plus de l'assurance, du sexe du patient, du sexe préféré et de rédiger une note) et de créer une demande de renvoi. Lorsque j'essaie de soumettre le formulaire de demande de renvoi, je reçois un mauvais nombre d'arguments erreur comme vu dans cette capture d'écran.Mauvais nombre d'arguments erreur avec has_many: par association et formulaire

Screenshot of Error

Je sais que cela doit avoir quelque chose à voir avec la façon dont je suis mes listes blanches params et ai essayé beaucoup de différentes variations, mais ne peut pas sembler obtenir la syntaxe (ou quelque chose d'autre) droit. Toute aide serait grandement appréciée.

De référence Demandes contrôleur:

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 

mon formulaire de demande de renvoi

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

renvoi demande Modèle

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 

Modèle Concern

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

ReferralRequestConcern Modèle

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

Voici le résultat de l'action de créer et de journal d'erreur associée après le changement: concern_ids [] pour 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) 

Répondre

0
def referral_request_params 
    params.require(:referral_request).permit(:content, :patient_gender_id, 
     :preferred_gender_id, :insurance_id, concern_ids: []) 

end 

(concern_ids: [] au lieu de :concern_ids [])

+0

Merci d'avoir remarqué que Sergey! Je ne reçois plus le mauvais nombre d'arguments, mais la tentative POST de "/ referral requests" revient maintenant après le début de la transaction. Savez-vous quoi d'autre je devrais vérifier? – mike9182

+0

cochez referral_request_params dans create action et @ referral_request.errors après l'échec de l'enregistrement. –

+0

Je viens d'ajouter la sortie de l'action de création et le journal des erreurs associé au bas de ma question initiale. Il est étrange que dans l'erreur, il est dit que l'assurance est nulle, parce que je n'ai pas d'assurance dans mon contrôleur ou dans mon modèle - juste assurance_id. – mike9182