Rails простой способ сортировки списка пользователей в обратном алфавитном порядке - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть эта строка кода в моем приложении rails 4,

= link_to t('first_name'), url_for(sort: "users.first_name"), style: 'color: white'

она сортирует мою таблицу имен пользователей по алфавиту с первого клика. Я пытался найти способ заставить его сортировать имена в обратном алфавитном порядке по второму щелчку после этого формата, но безрезультатно какие-либо предложения?

Контроллер, отвечающий за это согласно моему журналу,

def set_memberships
        @memberships = current_organization.memberships
          .includes(:roles, :user, linked_membership: :organization)
        if params[:action] == 'retired_memberships'
          @memberships = @memberships
            .joins("INNER JOIN users on users.id = memberships.user_id")
            .joins("LEFT OUTER JOIN memberships as linked_memberships ON memberships.linked_membership_id = linked_memberships.id")
            .where("(memberships.linked_membership_id is NOT NULL AND memberships.retired = true AND linked_memberships.retired = false) OR 
              (memberships.retired = true AND memberships.linked_membership_id IS NULL)")
            .where(retired: true)
        else
          @memberships = @memberships
            .joins("INNER JOIN users on users.id = memberships.user_id")
            .joins("LEFT OUTER JOIN memberships as linked_memberships ON memberships.linked_membership_id = linked_memberships.id")
            .where("(memberships.linked_membership_id IS NUll AND memberships.retired = false) OR 
              (memberships.linked_membership_id is NOT NULL AND memberships.retired = false AND linked_memberships.retired = true)")
        end
        @sort_field = params[:sort].presence || "users.last_name"
        @memberships = @memberships.order(@sort_field).page(params[:page]).per(30)
      end

Вероятно, стоит отметить, что этот контроллер сортирует не только по именам, но я прошу имена, чтобы было проще.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вы можете вставить фрагмент sql в метод заказа. Так что это будет работать:

User.order('name desc')
0 голосов
/ 04 ноября 2019

order(@sort_field) отвечает за сортировку.

https://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-order

По умолчанию ASC - по возрастанию, но вы можете перейти в DESC - по убыванию.

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