Ruby on rails 3 如何在rails中对表列进行排序?
我在Ryan Bates教程之后实现了这一点,对表列进行排序,效果非常好,但是当我呈现索引页面时,表已经按标题(asc)排序,我只想在用户单击列标题时对列进行排序 我怎样才能做到这一点 代码 控制器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
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