[英]Ruby on Rails - Increment by 1 from last object
我正在構建一個用戶圖庫應用程序,用戶可以在其中創建相冊並將圖像上傳到他們的相冊。 我正在為圖像使用nested forms
。
在我的images
數據庫中,我有一列稱為sort_order
。 我想使用sort_order
來管理排序和顯示用戶,例如:他正在查看12張圖片中的3張,其中3張是sort_order
數量,而12張是該相冊中總圖像的數量。
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
列,那么我可以接受。
收到表單數據后,向圖像數組添加一個索引(從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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.