Я бы использовал именованную область для предоставления порядка по умолчанию (доступно с Rails 2.1).
Вы добавили бы область действия в вашу модель Post:
named_scope :ordered, lambda {|*args| {:order => (args.first || 'created_at DESC')} }
Тогда вы можете позвонить:
@posts = Post.ordered.paginate :page => params[:page]
В приведенном выше примере будет использоваться порядок по умолчанию из named_scope
(created_at DESC
), но вы также можете указать другой:
@posts = Post.ordered('title ASC').paginate :page => params[:page]
Вы можете использовать это с предложением Ромуло:
sort_params = { "by_date" => "created_at", "by_name" => "name" }
@posts = Post.ordered(sort_params[params[:sort]]).paginate :page => params[:page]
Если params[:sort]
не найден в sort_params
и возвращает nil
, тогда named_scope
вернется к использованию порядка по умолчанию.
Railscasts содержит отличную информацию о named_scopes.