Создание значения по умолчанию для `: order`, которое можно перезаписать? - PullRequest
2 голосов
/ 12 марта 2012

Я хотел создать значение по умолчанию для :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])

posts / 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).

1 Ответ

1 голос
/ 24 марта 2012

Вы на Rails 3? Если это так, вы хотите либо reorder(params[:order_by]), либо except(:order).order(:order_by) - первый не рекомендовался в какой-то момент (но я думаю, что он не рекомендуется), а второй имел ошибку с областями действия по умолчанию в одной из версий Rails, но я забыл, какая .

Итак: @posts = current_user.subscribed_posts.reorder(params[:order_by]).paginate(:page => params[:page], :per_page => 5) должен сделать трюк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...