2017-06-27 1 views
0

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

Screenshot of Error

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) 

Antwort

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

end 

(concern_ids: [] statt :concern_ids [])

+0

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

+0

Überprüfen Sie Referral_request_params innerhalb von create action und @ referral_request.errors, nachdem das Speichern fehlgeschlagen ist. –

+0

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

Verwandte Themen