【发布时间】:2012-04-09 02:47:17
【问题描述】:
有没有一种优雅的方式来在 rails 的视图/控制器中实现排序 asc 和 desc 操作?
我拥有的是通用 index.html.erb 视图,它列出了我的某个模型的所有数据,我想添加一些小按钮(或使标题可点击)来对该列的列表进行升序或降序排序。我想知道是否有一种优雅而有效的方法可以做到这一点,或者我应该为我希望执行此操作的每一列(或按钮)添加一个新控制器。
【问题讨论】:
有没有一种优雅的方式来在 rails 的视图/控制器中实现排序 asc 和 desc 操作?
我拥有的是通用 index.html.erb 视图,它列出了我的某个模型的所有数据,我想添加一些小按钮(或使标题可点击)来对该列的列表进行升序或降序排序。我想知道是否有一种优雅而有效的方法可以做到这一点,或者我应该为我希望执行此操作的每一列(或按钮)添加一个新控制器。
【问题讨论】:
这里是数据关系,向您展示我们如何按加入顺序访问名称
@results = Result.has_pro.ascending(:name).page(params[:page])
【讨论】:
我最近使用了一个名为 sorted 的 gem,如果您想为此使用预打包的解决方案而不是推出自己的解决方案,效果很好。
【讨论】:
这是我正在使用的两个示例。第一个 @plans 是我只想从最低到最高排序的小数。另一个例子有点复杂,我想按从最新到最旧的顺序排列用户文件。然后,我使用第二个变量按创建日期对文件进行分组。这两个示例都在控制器中执行。
@plans = Plan.order("price")
@files= @user.files.order("id DESC").all
@dates = @files.group_by { |t| t.created_at }
有关您视图中的可点击按钮,请查看 Ryan Bates 的 Railscast 剧集,其中涵盖此信息。
【讨论】:
@user.files.order(id: :desc) 是最优雅的方式。如果它的动态效果更好,那就做@user.files.order("#{criteria} #{direction}")