2016-08-19 17 views
0

我試圖在rails中更新單個窗體上的多個記錄。Rails,使用集合模型一次更新多個記錄在一個表單上

我看過railscast #165,但我試圖用更簡潔的方式做到這一點。

有沒有辦法創建另一個模型,一種集合模型,並使用accept_nested_attributes一次更新多個記錄?

例如,將會有一個正常的ProductModel,然後是一個ProductCollections模型。 ProductCollections模型會擁有多個產品,並且它還會爲產品提供accept_nested_attributes_。

我遇到了問題,因爲我試圖做到這一點,而不是在數據庫中爲ProductCollections模型創建表。我也想知道路由應該如何工作。

+1

'Product.update()'將採用幾個ID和屬性數組。因此,您可以設置一個PATCH方法來接收許多產品並一次編輯多個產品。或者您可以按照您的說法進行操作並創建一個product_collection。有沒有其他的對象自然是一個product_collection,就像'商店'或'部門'或什麼的? – Swards

+0

是的,已經有一位家長(商店)。我不確定爲什麼我沒那麼早想到。我可以用它自己的嵌套窗體創建一個ProductCollectionController ...但仍然只是使用正常的產品模型。感謝您的幫助。 – tquill

+0

在這種情況下,您實際上會編輯(和更新)商店對象。產品的accepted_nested_attributes_將存儲在商店中,然後您只需提交更新操作即可。這將全部在stores_controller上。 – Swards

回答

0

根據Sward's評論,不需要新模型。由於每個產品都有一個父級(商店),因此我可以使用Store型號和accepts_nested_attributes_for :products

我剛剛爲產品(處理傳入表單提交和重定向)以及帶有fields_for表單的視圖同時更新多個記錄創建了一個單獨的集合控制器。

0

有一種簡單的方法: (以下從railscast的例子中,使用Rails的較新版本)

Product.where(id: params[:product_ids]).update_all(discontinued: true) 

它比以前的版本的API更具有可讀性。您首先使用典型的搜索API選擇產品,然後將update_all應用於該查詢的結果。

ProductCollection是帶有ProductModel類的給定查詢的結果。它不需要自己的數據庫表。

+0

我想保持我的問題有點簡單,但實際上,我的產品在它們下面嵌套了另一個模型。是否有可能使用你的方法更新這些?我正在考慮accept_nested_attributes_for方法,因爲很容易進行多層嵌套。 – tquill

+0

我相信你可以做到這一點。在這些參數中應該是嵌套值。例如,如果接受:item的嵌套屬性,那麼在更改參數中,應該有item_attributes:{updated_at:Time.now} –

相關問題