Как отсортировать модель рельсов по последнему активному полю has_many? - PullRequest
0 голосов
/ 15 января 2019

У меня есть две модели:

User has_many Subscription.

В моей пользовательской модели есть функция active_subscription.

def active_subscription
  subscriptions.where(active: true).last
end

Я бы хотел сортировать моего пользователя по полю type_name этой активной подписки. Мне нужно использовать активную подписку, поскольку в моих представлениях отображается только последняя активная подписка.

У меня есть это написано:

includes(:subscriptions).order("subscriptions.type_name #{sort_order}")

Но это не относится к активной подписке.

Есть идеи?

1 Ответ

0 голосов
/ 15 января 2019

использование области видимости может помочь, ниже приведен пример вашей проблемы

class Subscription < ApplicationRecord

  scope :active_subscription, lambda { where('active = ?',true)}
  scope :type_name_order,     lambda { |q| order("type_name :q", q: "#{q}") }

end

User.subscriptions.active_subscription.type_name_order('DESC').last

@users = Subscription.joins(:user).active_subscription.type_name_order('DESC').select('users.username','subscriptions.*')

@users.first.username # you will get first username

# you can also combine with last 

@users = Subscription.joins(:user).active_subscription.type_name_order('DESC').select('users.*','subscriptions.*').last(10)

# in my above example i'm using * to select all column of table users
# for example your table users has gender column you can use

puts @users.first.gender 

# if table users and subscriptions have same column name for example subscriptions.active and users.active then you should use alias 'AS' in select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...