Ich habe drei Modelle im Zusammenhang mit has_many: durch wie unten zu sehen. Der Benutzer sollte in der Lage sein, Bedenken auszuwählen (zusätzlich zu Versicherung, Geschlecht des Patienten, bevorzugtes Geschlecht und Schreiben einer Notiz) und eine Weiterleitungsanfrage zu erstellen. Wenn ich versuche, das Referral Request Formular zu senden, bekomme ich eine falsche Anzahl von Argumenten Fehler, wie in diesem Screenshot zu sehen.Falsche Anzahl von Argumenten Fehler mit has_many: durch Zuordnung und Formular
Ich weiß, das etwas damit zu tun haben muss, wie ich meine params bin Whitelisting und haben viele verschiedene Varianten ausprobiert, aber kann nicht scheinen, um die Syntax (oder etwas anderes) richtig zu machen. Jede Hilfe würde sehr geschätzt werden.
Von 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
meine Überweisung Anfrage
<%= 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 %>
Verweisungsantrag Modell
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 Modell
class Concern < ApplicationRecord
has_many :referral_request_concerns
has_many :referral_requests, through: :referral_request_concerns
end
ReferralRequestConcern Modell
class ReferralRequestConcern < ApplicationRecord
belongs_to :referral_request
belongs_to :concern
validates :referral_request_id, presence: true
validates :concern_id, presence: true
end
Hier ist die Ausgabe der Aktion erstellen und die damit verbundene Fehlerprotokoll nach der Änderung: concern_ids [] zu 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)
Danke für den Fang Sergey! Ich bekomme nicht mehr die falsche Anzahl von Argumenten, aber der POST-Versuch, "/ Anfragen" zu starten, wird nach dem Beginn der Transaktion zurückgesetzt. Weißt du, was ich noch überprüfen sollte? – mike9182
Überprüfen Sie Referral_request_params innerhalb von create action und @ referral_request.errors, nachdem das Speichern fehlgeschlagen ist. –
Ich habe gerade die Ausgabe der Erstellungsaktion und des zugehörigen Fehlerprotokolls am Ende meiner ursprünglichen Frage hinzugefügt. Es ist seltsam, dass in dem Fehler, es sagt, Versicherung ist null, denn ich habe keine Versicherung in meinem Controller oder in meinem Modell - nur Versicherungs-ID. – mike9182