我正在构建一个用户库应用程序,其中用户可以创建相册并将图像上传到他们的相册。我正在使用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