Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在rails中对表列进行排序?_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 如何在rails中对表列进行排序?

Ruby on rails 3 如何在rails中对表列进行排序?,ruby-on-rails-3,Ruby On Rails 3,我在Ryan Bates教程之后实现了这一点,对表列进行排序,效果非常好,但是当我呈现索引页面时,表已经按标题(asc)排序,我只想在用户单击列标题时对列进行排序 我怎样才能做到这一点 代码 控制器 class ProductsController < ApplicationController helper_method :sort_column, :sort_direction def index @products = Product.order(sort_colu

我在Ryan Bates教程之后实现了这一点,对表列进行排序,效果非常好,但是当我呈现索引页面时,表已经按标题(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
index.html.erb

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

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

以防万一有人会发现这个问题。可排序列有一个很好的宝石(不仅如此):

请看下面的例子:

您可以尝试对索引方法进行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

您描述的排序最好用Javascript实现,因为它基本上是一个客户端问题(而rails是用来帮助解决服务器端问题的)。jquery的表排序器插件正是您想要的:。您好@Reck,谢谢您的推荐。作为一个学习过程,我想探索一下rails实现这一点的可能性。您想要的产品列表上的默认排序是什么?目前,ransack不适用于edge RoR。如果您在
polyamorous
方面遇到问题,请尝试将其添加到您的gem文件中<代码>gem'polyamorous',github:'activerecord hackery/polyamorous'
gem'polyamorous',github:'activerecord hackery/polyamorous'
该gem不再被积极维护。作者提到,他不会对它进行研究,它正在寻找维护人员。它有一个Rails 5分支。因此,如果您担心使用它时没有得到维护,那么原始作者缺乏维护就不再是主要问题。
.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);
}
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