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
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)
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
cochez referral_request_params dans create action et @ referral_request.errors après l'échec de l'enregistrement. –
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