簡體   English   中英

通過傳遞 id 將 `accepts_nested_attributes_for` 中的現有記錄與 has_one 關聯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM