0

Ich versuche, eine Methode namens "Pack" unter einer Ressource namens Jobs zu erstellen."Parameter fehlt oder der Wert ist leer" in geschachtelte Ressource-Methode

Meine Strecken wie folgt aussehen:

resources :jobs do 
    member do 
     get 'pack' => 'jobs#pack' 
    end 
    end 

Und die vereinfachte Version meiner Controller-Methode sieht wie folgt aus.

def pack 
    @job.pack 
    end 

Und die Packung zu bekommen, die ich habe:

before_action :set_job, only: %i[show edit update destroy pack] 

    # Use callbacks to share common setup or constraints between actions. 
    def set_job 
    @job = Job.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def job_params 
    params.require(:job).permit(:description, :status, :client_id, :pack_size, :user_id) 
    end 

Ich bin in der Lage meines/Ende/point/Jobs/1/pack und lösen die Controller-Methode zu treffen, aber ich bin schlagen Sie den Fehler:

param is missing or the value is empty: job

Sowohl die sparen params die Show und Pack Methoden erhalten:

Parameters: {"id"=>"1"} 

Ich bin mir also nicht wirklich sicher, warum nur die #pack-Methode mir den fehlenden Jobfehler beschert. Warum passiert das und wie kann ich es stoppen?

Console Ausgabe:

Started GET "/api/v1/jobs/1/pack?user_id=1" for 127.0.0.1 at 2017-11-20 19:57:24 +0800 
Processing by JobsController#pack as HTML 
    Parameters: {"user_id"=>"1", "id"=>"1"} 
    Job Load (0.2ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 
Completed 400 Bad Request in 2ms (ActiveRecord: 0.2ms) 



ActionController::ParameterMissing - param is missing or the value is empty: job: 
    app/controllers/jobs_controller.rb:87:in `job_params' 
    app/controllers/jobs_controller.rb:6:in `pack' 
+0

veröffentlichen kann 'pack' Methode, die Sie im Inneren Modell erstellt haben (? @ Pack.pack, was es tut) –

+0

Sorry, das war ein Tippfehler. Es sollte @ job.pack sein – JCDJulian

+0

yeah, können Sie vollständige Spur hinzufügen? –

Antwort

1

Das Problem liegt in dem ersten Teil des job_params Körper: Sie :job wie in params.require(:job) erfordern, aber keine :job ist in den params:

Parameters: {"user_id"=>"1", "id"=>"1"} 

So können Sie entweder den require Teil entfernen und einfach folgende in job_params aufrufen:

parmas.permit(:description, :status, :client_id, :pack_size, :user_id, :id) 

Hinweis:? Ich habe :id in der Whitelist hinzugefügt, wie ich sehe, dass in dem params vorhanden zu sein

+0

Richtig verstehe ich das. Was ich nicht verstehe ist, wie die #show (/ jobs /: id) -Methode es verarbeiten kann, aber #pack (/ jobs /: id/pack) kann nicht – JCDJulian

+0

können Sie die genau 2 Zeilen von '# show' teilen und '# pack', die den Aufruf von params enthalten? –

Verwandte Themen