如何在边栏中对表列进行排序

  • 本文关键字:排序 ruby-on-rails-3
  • 更新时间 :
  • 英文 :


我按照 Ryan Bates 教程实现了这一点sort table columns它工作得很好,但是当我呈现索引页时,表格已经按标题 (asc) 排序,并且我想仅在用户单击列标题时对列进行排序。

我怎样才能做到这一点?

法典

控制器

class ProductsController < ApplicationController
  helper_method :sort_column, :sort_direction
  def index
    @products = Product.order(sort_column + " " + sort_direction)
  end
  # ...
  private
  def sort_column
    Product.column_names.include?(params[:sort]) ? params[:sort] : "name"
  end
  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end
end

helper_method

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

索引.html.erb

<tr>
  <th><%= sortable "name" %></th>
  <th><%= sortable "price" %></th>
  <th><%= sortable "released_at", "Released" %></th>
</tr>

.CSS

.pretty th .current {
  padding-right: 12px;
  background-repeat: no-repeat;
  background-position: right center;
}
.pretty th .asc {
  background-image: url(/images/up_arrow.gif);
}
.pretty th .desc {
  background-image: url(/images/down_arrow.gif);
}

你应该看看Ransack。它在排序和复杂搜索方面做得很好。有一个很棒的RailsCasts视频应该可以帮助你,而且侵入性要小得多。

以防

万一有人会发现这个问题。可排序列有一个很棒的宝石(不仅如此):https://github.com/leikind/wice_grid

看看例子:http://wicegrid.herokuapp.com/

您可以尝试在索引方法上放置 if 检查

def index
  if sort_column and sort_direction
    @products = Product.order(sort_column + " " + sort_direction)
  else
    @products = Product.all()
  end
end
def sort_column
  Product.column_names.include?(params[:sort]) ? params[:sort] : nil
end
def sort_direction
  %w[asc desc].include?(params[:direction]) ? params[:direction] : nil
end

相关内容

  • 没有找到相关文章

最新更新