簡體   English   中英

Ruby on Rails-從最后一個對象增加1

[英]Ruby on Rails - Increment by 1 from last object

我正在構建一個用戶圖庫應用程序,用戶可以在其中創建相冊並將圖像上傳到他們的相冊。 我正在為圖像使用nested forms

在我的images數據庫中,我有一列稱為sort_order 我想使用sort_order來管理排序和顯示用戶,例如:他正在查看12張圖片中的3張,其中3張sort_order數量,而12張是該相冊中總圖像的數量。

sort_orderintegerdefault: 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.

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