我想为:order
创建一个默认值:
class Comment < ActiveRecord::Base
default_scope :order => 'total_votes DESC'
我也让用户对评论进行排序:
posts_controller.rb:
@posts = current_user.subscribed_posts.paginate(:page => params[:page],
:per_page => 5,
:order => params[:order_by])
帖/ show.html.erb:
<span><%= link_to 'Date (DESC)', post_path(@post, :order_by => "created_at DESC") %></span>
<span><%= link_to 'Date (ASC)', post_path(@post, :order_by => "created_at ASC") %></span>
<span><%= link_to 'Votes', post_path(@post, :order_by => "total_votes DESC") %></span>
我按哪个链接并不重要,default_scope
没有被覆盖(无论如何都保持total_votes DESC
。)
这是默认行为吗?如果是这样,对于这种情况,什么是正确的解决方案?
(我希望:order
有一个默认值,但只要点击:order_by
中的链接,就可以将其更改为show.html.erb
的值。
答案 0 :(得分:1)
你是否在Rails 3上?如果是这样,你想要reorder(params[:order_by])
或except(:order).order(:order_by)
- 前者在某一时刻被弃用(但我认为不推荐),后者在其中一个Rails版本中有一个默认作用域的bug,但我忘记了哪一个。
所以:
@posts = current_user.subscribed_posts.reorder(params[:order_by]).paginate(:page => params[:page],
:per_page => 5)
应该做的。