[英]Rails accepts_nested_attributes_for with has_one association issue
[英]Use existing record in `accepts_nested_attributes_for` with has_one association by passing id
RoR noob 在這里,使用 Mongoid。
我有一個帶有has_one
關聯的 model (ItineraryItem),它接受accepts_nested_attributes_for
class ItineraryItem
include Mongoid::Document
include Mongoid::Timestamps
field :title, type: String
has_one :poi
accepts_nested_attributes_for :poi
end
我可以通過傳遞poi_attributes
創建一個新的ItineraryItem
以下參數主體與Poi
一起用於創建新的ItineraryItem
:
{
"itinerary_item" : {
"title" : "Itinerary Item With New POI",
"description" : "Itinerary Item Description",
"poi_attributes" : {
"title" : "A New POI in creation"
}
}
}
但我無法使用現有的Poi
創建新的ItineraryItem
以下對我不起作用:
{
"itinerary_item" : {
"title" : "Itinerary Item With New POI",
"description" : "Itinerary Item Description",
"poi_attributes" : {
"id" : "5ea9bdf6b980a78222f71263" # I've made sure this id exists
}
}
}
以上返回錯誤
Poi 無效
帶有 422(無法處理的實體)
我猜我不應該關聯現有的 POI 記錄,因為它是一對一的關聯,並且每個ItineraryItem
都應該有自己的Poi
。 但我不確定。 它是被 Rails 阻止了,還是我錯過了什么?
在 internary_items controller 中,將“id”添加到嵌套屬性中。 在您的情況下,它將是:
params.require(:payload).permit(:iternary_item, :poi_attributes => [:id, :x,:y])
如果Poi
確實具有可為空的iternary_item_id
字段,則可以將其“重新分配”給另一個 object。
從您發布的內容來看,您似乎正在嘗試通過某種 API controller 創建一個新的 object。 嘗試在鞋底上運行rails c
並檢查您是否能夠創建一個新的 IternaryItem 使用罐 id 作為嵌套參數 - 它可以給你一些詳細的錯誤 - 如果你能夠做到這一點,那么問題就出在某個地方否則,您需要將id
添加到poi_attributes
中 poi_attributes 的允許參數列表中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.