我生成一個新的導軌5 --api --database = PostgreSQL的應用程序中的一天,僅創建一個支架(英雄)。我想知道強參數鐵軌是如何工作的,因爲我看到一些奇怪的行爲:導軌5 API斯特朗參數行爲
控制器的樣子:
def create
hero = Hero.new(hero_params)
if hero.save
render json: hero, status: :created, location: hero
else
render json: hero.errors, status: :unprocessable_entity
end
end
我hero_params是這樣的:
def hero_params
params.require(:hero).permit(:name)
end
,所以我會假設客戶端需要提交包含"hero"
鍵的哈希和它允許有被允許時,該控制器動作稱爲被大量分配"name
「子項。
意思,JSON應該是這樣的:
{
"hero": {
"name": "test"
}
}
一切都很好,但這裏是我看到奇怪的行爲。當用戶提交的確切JSON如上,參數進來爲:
Parameters: {"hero"=>{"name"=>"test"}}
現在,如果用戶提交了剛:
{ "name": "test" }
它仍然創建了一個新的資源和參數進來如下:
Parameters: {"name"=>"test", "hero"=>{"name"=>"test"}}
爲什麼有兩組參數,一個符合實際提交的數據,一個在的格式英雄對象,好像它正在預期大規模的任務?
怎麼來的
require(:hero)
不會引發錯誤時,該鍵不提交?我認爲這個問題的答案是因爲什麼是自動從問題1
上什麼,我在這裏失蹤的任何信息,將不勝感激創建第二哈希("hero"=>{"name"=>"test"}}
,因爲這是準系統軌行爲OUT- 。的現成
看起來用戶提交了BOTH參數格式,例如, '{name:「test」,hero:{name:「test」}}'。這可能嗎? – messanjah
不,我是用戶,我通過POSTMAN發送了我的請求,這兩個示例都是分開發送的。 –