2016-05-31 85 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