我正在處理一個應用程序,在該應用程序中,我發送的請求以我的Rails服務器參數存儲在JSON格式中。假設我的應用程序將請求路由到我的cats_controller上的create函數。貓模型有三個字段:名稱,飢餓,心情。現在每隻貓都有一些小貓。我的小貓模型有兩個字段:cat_id(指的是貓擁有它,因爲我的小貓屬於貓)和:可愛。現在,每次我在應用程序上創建一個貓時,我都希望通過一次調用完成它,所以我使用POST請求從我的應用程序調用/cats.json。參數以JSON格式存儲,它們包括以下字段{name:「」,hunger:「」,mood:「」,cute:「」}。現在控制器使用這些參數創建一個新的貓,然後使用cat.kittens.build()創建一個分配給這個貓的新貓。然後,小貓只需要使用我發送的「心情:」的最後一個參數來正確創建。Rails如何解析POST請求參數?
現在的問題是,當我從這個控制器打印params變量時,我得到了以下哈希:{name:「」,hunger:「」,mood:「」,cute:「」,cat:{name :「」,飢餓:「」,心情:「」}}。爲什麼會發生? 如何Rails的解析POST請求參數,並把我從
{名: 「」 飢餓 「」 心情: 「」 可愛: 「」} 到 {名: 「」 飢餓」 」心情: 「」 可愛: 「」 貓:{名稱: 「」 飢餓 「」 心情: 「」}}
這是如何 「貓」 哈希生成的時候,它遵循什麼規則?
然後,我的後續問題將是,因爲在使用它們之前,rails 4會強制您將參數列入白名單。我做:
params.require(:CAT).permit(:名稱,:飢餓:心情)
我怎麼還允許:可愛的價值?
您可以通過簡單修改已有的代碼來接受參數params.require(:cat ).permit(:name,:hunger,:mood,:cute)' – HolyMoly
如果你在你的問題中包含你的代碼是很有幫助的,因爲它可以讓人們更容易地看到發生了什麼。我建議你發佈你的控制器和表格(如果有的話)以及任何其他相關的代碼。我不知道你在創建時如何輸入貓的值,或者如何(通過表單),但我懷疑問題在那裏,可能是語法。 – HolyMoly
所以我找到的解決方案是從params.require(:cat).permit(:name,:hunger,:mood)中刪除** require()**部分,然後只需將:cute添加到permit函數。 我的問題仍然存在,爲什麼在這種情況下會生成cat:屬性。 當我從消息屬性開始: {name:「」,hunger:「」,mood:「」,cute:「」} 爲什麼rails會將它們轉換爲: {name:「」,hunger:「 「,心情:」「,可愛:」「,貓:{名稱:」「,飢餓:」「,心情:」「}} 」cat:{name:「」,hunger:「」 :「「}「 來自? – Curse