2016-05-31 81 views
0

我正在構建一個用戶庫應用程序,其中用戶可以創建相冊並將圖像上傳到他們的相冊。我正在使用nested forms作爲圖像。Ruby on Rails - 從最後一個對象開始增加1

在我的images數據庫中,我有一個名爲sort_order的列。我想用sort_order管理分類和展示用戶,爲前:他看到3月12日圖像,其中是sort_order和數量是在專輯總張數的。

sort_orderintegerdefault: 0。我想要的是增加/ incrementsort_order每個圖像的數量基於以前的sort_order在同一專輯中的最後一張圖片。

對於離:圖像1將具有sort_order: 1圖像然後2將具有先前圖像sort_id +1 =>sort_order: 2等。

這是我現在使用的代碼:

after_create :previous_image 

    def previous_image 

    img = user.images.order("id ASC") 

    img.each do |image| 
     image.increment!(:sort_order, self.sort_order + 1) 
    end 

    end 

該做的工作,但在錯誤的排序。

id  sort_order 
10   3 
11   2 
12   1 

,而不必,id: 10sort_order: 1,它越來越3

這是日誌:

SQL (0.5ms) UPDATE "images" SET "sort_order" = ?, "updated_at" = ? WHERE "images"."id" = ? [["sort_order", 1], ["id", 398]] 

    user Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 160]] 

    Slide Load (0.1ms) SELECT "images".* FROM "images" WHERE "images"."user_id" = ? ORDER BY id DESC [["user_id", 160]] 

    SQL (0.1ms) UPDATE "images" SET "sort_order" = ?, "updated_at" = ? WHERE "images"."id" = ? [["sort_order", 1], ["id", 399]] 

    SQL (0.1ms) UPDATE "images" SET "sort_order" = ?, "updated_at" = ? WHERE "images"."id" = ? [["sort_order", 2], ["id", 398]] 

    user Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 160]] 

    Slide Load (0.1ms) SELECT "images".* FROM "images" WHERE "images"."user_id" = ? ORDER BY id DESC [["user_id", 160]] 

    SQL (0.1ms) UPDATE "images" SET "sort_order" = ?, "updated_at" = ? WHERE "images"."id" = ? [["sort_order", 1], ["id", 400]] 

    SQL (0.1ms) UPDATE "images" SET "sort_order" = ?, "updated_at" = ? WHERE "images"."id" = ? [["sort_order", 2], ["id", 399]] 

    SQL (0.1ms) UPDATE "images" SET "sort_order" = ?, "updated_at" = ? WHERE "images"."id" = ? [["sort_order", 3], ["id", 398]] 

它從底部開始,而不是頂部。我該如何解決它?

如果沒有sort_order列還有其他方法可以做到這一點,我願意接受。

回答

0

收到表單數據後,將索引(從1開始)添加到圖像數組。

考慮到這是你的圖片來自形式數組:

images = [{name: 'Image 1', data: 123}, {name: 'Image 2', data: 456}] 

使用with_index(1)的排序順序連接到每一個元素:

images.map.with_index(1).to_a

=> [[{:name=>"Image 1", :data=>123}, 1], [{:name=>"Image 2", :data=>456}, 2]] 
+0

謝謝,我應該將它添加到我的模型中嗎?我正在使用'nested_form',並且沒有權限爲圖像創建函數,並且每個圖像都有自己的頁面。我不使用'每個做' – Rubioli

+0

你必須在建立/創建你的圖像模型之前做到這一點 – emaillenin