我有一個Rails 5 API,它應該能夠從HTTP POST請求中發送的JSON中創建Visit對象並將其存儲在數據庫中。 訪問模型與VisitComplement模型具有關聯(has_one)。 我使用cURL發送的發佈請求也包含此關聯的字段。Rails API沒有正確接收cURL POST嵌套的json
問題是VisitComplement數據沒有存儲在數據庫中,只有訪問數據被存儲。
訪問模式:
class Visit < ApplicationRecord
has_one :visit_complement
has_one :physical_exam
accepts_nested_attributes_for :visit_complement
end
VisitsController:
class VisitsController < ApplicationController
def create
@visit = Visit.new(visit_params)
if @visit.save
render json: @visit, status: :created, location: @visit
else
render json: @visit.errors, status: :unprocessable_entity
end
end
private
def visit_params
params.require(:visit).permit(:fumo, :alcool, visit_complement_attributes: [:sintomas])
end
end
捲曲POST請求:
curl -H "Accept: application/json" -H "Content-type: application/json" -d '{"fumo": "10", "visit_complement_attributes": {"sintomas": "febre"}}' http://localhost:3000/api/v1/visits
當我運行上面的命令,我從服務器獲取以下的輸出:
<!-- language: lang-none -->
Started POST "/api/v1/visits" for ::1 at 2016-11-13 16:14:56 -0200
Processing by VisitsController#create as JSON
Parameters: {"fumo"=>"10", "visit_complement_attributes"=>{"sintomas"=>"febre"}, "visit"=>{"fumo"=>"10"}}
Can't verify CSRF token authenticity.
(0.2ms) begin transaction
SQL (0.5ms) INSERT INTO "visits" ("fumo", "created_at", "updated_at") VALUES (?, ?, ?) [["fumo", 10], ["created_at", 2016-11-13 18:14:56 UTC], ["updated_at", 2016-11-13 18:14:56 UTC]]
(1.0ms) commit transaction
Completed 201 Created in 33ms (Views: 3.0ms | ActiveRecord: 2.4ms)
aditional的信息
- 雖然這是一個軌道的API,我沒有與--api創建選項。
- 我正在使用rack-cors gem來繞過CSRF身份驗證問題
- 我沒有VisitComplement模型的控制器。
'無法驗證CSRF令牌authenticity.'這將是你的問題。你不能讓它正確設置。請仔細檢查一下。 – baron816
不是這樣。這是我用機架寶石繞過的安全問題。 但是可以肯定的是,我使用--api選項創建了一個新應用程序(在這個應用程序中我沒有這個安全問題),但我仍然有同樣的問題。看來rails參數包裝機制會將「fumo」=>「10」,「visit_complement_attributes」=> {「sintomas」=>「febre」}轉換爲「visit」=> {「fumo」=>「10 「},沒有看到關聯數據。 –