Ruby on Rails - 向专辑图像添加排序顺序

时间:2016-06-03 10:43:13

标签: ruby-on-rails ruby sorting nested-forms

我正在创建用户相册应用程序。用户可以将许多图片上传到他们的相册,我使用nested_forms将图片上传到相册。

在我看来,当用户看到属于相册的图片时,我想要显示 X(total_number_of_images)

例如:如果相册中有 12 图像且用户在该相册中看到第3张图片,那么 3 of 12 当他们点击 next 时,它会变为 4 of 12 等。

请参阅附件 enter image description here

我怎样才能让它发挥作用?我是否需要在column - db (如何添加排序顺序)中添加images,还是有其他方法可以这样做?

这是我迄今为止所做的事情: 我在sort_order - db中添加了images列并执行此操作:

class Image < ActiveRecord::Base
after_create :previous_slide

@slide = user.images.order("id DESC")
  @slide.find_each do |slide|
   slide.increment!(:sort_order, + 1)
  end

end

这实际上会增加sort_order column的增量,但顺序错误,因为order总是id ASC,无论我自己添加了什么。 我明白了:

id    sort
1      4
2      3
3      2
4      1

必须是:

id    sort
1      1
2      2
3      3
4      4

正如你可以看到错误的订单。

1 个答案:

答案 0 :(得分:0)

我认为此代码有助于解决您的问题

class ImageController < ApplicationController
  helper_method :sort_column, :sort_direction

  def index
       @slide = User.images.order(sort_column + " " + sort_direction)
  end


  private

  def sort_column
    User.images.include?(params[:sort]) ? params[:sort] : "name"
  end

  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end
end

Inapplication_helper.rb

 def sortable(column, title = nil)
      title ||= column.titleize
      css_class = column == sort_column ? "current #{sort_direction}" : nil
      direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
      link_to title, {:sort => column, :direction => direction}, {:class => css_class}
    end