我正在構建一個用戶庫應用程序,其中用戶可以創建相冊並將圖像上傳到他們的相冊。我正在使用nested forms
作爲圖像。Ruby on Rails - 從最後一個對象開始增加1
在我的images
數據庫中,我有一個名爲sort_order
的列。我想用sort_order
管理分類和展示用戶,爲前:他看到3月12日圖像,其中是sort_order
和數量是在專輯總張數的。
sort_order
是integer
和default: 0
。我想要的是增加/ increment
sort_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: 10
sort_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
列還有其他方法可以做到這一點,我願意接受。
謝謝,我應該將它添加到我的模型中嗎?我正在使用'nested_form',並且沒有權限爲圖像創建函數,並且每個圖像都有自己的頁面。我不使用'每個做' – Rubioli
你必須在建立/創建你的圖像模型之前做到這一點 – emaillenin