2016-11-08 5 views
0

Ich habe die folgende Route:Locken-Befehl versagt, wenn Post-Anforderung senden App Schienen

match '/curl_example' => 'people#curl_post_example', via: :post 

In meinem Controller:

class PeopleController < ApplicationController 
    before_action :set_person, only: [:show, :edit, :update, :destroy] 
    skip_before_action :verify_authenticity_token, :only => [:curl_post_example] 
... 
    def curl_post_example 
    Person.create(request.body.read) 
    render plain: "Thanks for sending a POST request with cURL! Payload: #{request.body.read}" 
    end 
... 

Ich versuche, eine Person über curl Befehl mit dem folgenden zu erstellen ...

curl -X POST -d "{"first_name"=>"mista", "last_name"=>"wintas"}" http://localhost:3000/curl_example 

Wenn ich dies tun bekomme ich diesen Fehler an der Konsole ...

Started POST "/curl_example" for ::1 at 2016-11-08 13:24:46 -0500 
Processing by PeopleController#curl_post_example as */* 
    Parameters: {"{first_name"=>">mista, last_name=>wintas}"} 
Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms) 



ArgumentError (When assigning attributes, you must pass a hash as an argument.): 

Sieht für mich wie ein Hash aus? Was vermisse ich?

+0

Versuchen Sie, 'Person.create (params)' in anstelle von 'Person.create (request.body.read)' –

+0

Ich bekomme den Fehler 'ActiveModel :: ForbiddenAttributesError (ActiveModel :: ForbiddenAttributesError):' using params. Wenn ich in person_params übergehe, komme ich ein bisschen weiter mit dem Fehler 'ActionController :: ParameterMissing (param fehlt oder der Wert ist leer: person): 'Außerdem gebe ich' curl -X POST -d "" person " => {"first_name" => "mista", "last_name" => "wintas"} "http: // localhost: 3000/curl_example" Ich bekomme den Fehler 'NoMethodError (undefinierte Methode' permit 'für "> {first_name = > mista, last_name => wintas} ": String' – Lumbee

Antwort

1

müssen Sie params wie dies passieren:

curl -d "person[first_name]=john" -d "person[last_name]=doe" 

Quelle: curl command line

und dann in Ihrem Controller:

private def person_params 
    params.require(:person).permit(:first_name, :last_name) 
end 

und rufen person_params statt params in Person.create...

+0

Mit dem obigen Code bekomme ich den Fehler 'ActionController :: ParameterMissing (param fehlt oder der Wert ist leer: person):' – Lumbee

+1

Sie müssen Parameter wie diese' curl übergeben -d "Person [Vorname] = John" -d "Person [Nachname] = Doe" Quelle: http://Stackoverflow.com/questions/5826690/curl-command-line-post –

+0

Süße. Danke dude. Wenn Sie Möchten Sie Ihre Antwort oben bearbeiten, werde ich sie akzeptieren. – Lumbee

Verwandte Themen