ข้อมูลจำเพาะคำขอ: จะสร้างผู้ใช้ใหม่ผ่านคำขอ POST ได้อย่างไร

รับตัวควบคุมต่อไปนี้:

class UsersController < ApplicationController
      include ActionController::ImplicitRender
      include ActionController::ParamsWrapper

      wrap_parameters format: :json
      # POST /users
      # POST /users.json
      def create
        #@user = User.new(params[:user])
        @user = User.new(user_params)

        if @user.save
          render json: @user, status: :created, location: @user
        else
          render json: @user.errors, status: :unprocessable_entity
        end
      end

      private

        def user_params
          params.require(:user).permit(:name, :email)
        end
end

ฉันสามารถสร้างผู้ใช้ใหม่ได้โดยส่งคำขอ HTTP POST ด้วย CURL:

curl -H "Content-Type: application/json" -d '{"name":"xyz","email":"[email protected]"}' http://myrailsapp.dev/users 

ฉันจะสร้างข้อมูลจำเพาะคำขอให้สอดคล้องได้อย่างไร

  # spec/requests/users_spec.rb
  describe "POST /users" do
    it "should create a new user" do

      # FILL ME IN

      expect(response).to have_http_status(200)
    end
  end

ความคิดแรกของฉันคือเพิ่มสิ่งต่อไปนี้:

post users_path, body: '{"name":"xyz","email":"[email protected]"}'

ซึ่งส่งผลให้สถานะ HTTP เป็น 400


person jottr    schedule 16.10.2014    source แหล่งที่มา
comment
stackoverflow.com/questions/14775998/   -  person Tom Hert    schedule 17.10.2014
comment
นั่นแก้ไขมันแล้ว ถ้าคุณเขียนเป็นการตอบกลับฉันจะยอมรับมัน   -  person jottr    schedule 17.10.2014
comment
จริงๆ แล้ว ความคิดเห็นแรกของคุณ (ซึ่งคุณลบไปอย่างน่าเศร้า) เป็นคำตอบที่ได้ผล: ` post users_path, user: {name: Test, email: [email protected] }` ดูเหมือนว่าจะไม่จำเป็นต้องผ่าน CONTENT_TYPE   -  person jottr    schedule 17.10.2014
comment
เพราะหลังจากนั้นฉันพบคำถามเดียวกัน เพิ่งเชื่อมโยงสิ่งนั้นและทำเครื่องหมายคำถามของคุณว่าซ้ำกัน   -  person Tom Hert    schedule 17.10.2014


คำตอบ (2)


นี่คือคำตอบของคุณ:

post users_path, :user => {"name":"xyz","email":"[email protected]"}, { 'CONTENT_TYPE' => 'application/json'}
person Tom Hert    schedule 16.10.2014
comment
ฉันเพิ่งสังเกตเห็นว่าสิ่งนี้ส่งผลให้เกิดข้อผิดพลาด: syntax error, unexpected ':', expecting => (SyntaxError) ...post users_path, user: {"name":"xyz","email":"[email protected]... ดูความคิดเห็นใต้คำถามของฉันเพื่อเป็นข้อมูลอ้างอิงด้วย - person jottr; 17.10.2014
comment
ปรับปรุงแล้ว น่าจะโอเคแล้ว - person Tom Hert; 17.10.2014
comment
ไม่. ปัญหายังคงอยู่ - person jottr; 17.10.2014

ปัญหาอยู่ในส่วนหัว คุณต้องแน่ใจว่ามันระบุเนื้อหา JSON!

post users_path, '{"name":"xyz","email":"[email protected]"}' , { 'CONTENT_TYPE' => 'application/json', 'ACCEPT' => 'application/json' }

หวังว่ามันจะเหมาะกับคุณ! ไชโย, ม.ค

person jfornoff    schedule 16.10.2014
comment
ขอบคุณความคิดเห็นของ Jan. Toms ด้านบนแก้ไขได้จริง - person jottr; 17.10.2014
comment
ยอดเยี่ยม! ดีใจที่เราได้มันออกไป! - person jfornoff; 17.10.2014