У меня есть следующие отношения в модели User.Rails - has_one отношения с WHERE & ORDER?
has_many :subscriptions, dependent: :destroy
has_one :subscription, -> { where 'end_date >= ?', Date.today }
: подписка - это, по сути, их самая последняя ежемесячная подписка. : subscriptions - это массив всех своих предыдущих ежемесячных подписчиков (включая самые последние). Они перечисляют start_date, end_date, user_id, plan_id, payment_method.
Когда план подписки обновлен или изменен, я изменил end_date на текущей подписке на Date.today (обозначая подписку, подписанную сегодня), а затем создайте новую подписку, которая начинается сегодня и заканчивается через месяц.
Проблема с наличием end_date как Date.today заключается в том, что предложение WHERE будет принимать отмененную подписку и новую подписку. Но будет способствовать отмененной подписке, потому что SQL-запрос сгенерировал tacks в классе ORDER BY для первичного идентификатора.
ORDER BY "subscriptions"."id" ASC LIMIT 1
Для жизни меня, я не могу понять, как в обратном ORDER BY с ASC в DESc на ид. Но я бы предпочел, чтобы он заказывался на основе метки времени created_at. Следующим был бы соответствующий код только для заказа, но не обязательно, что у меня есть предложение WHERE в дополнение к предложению ORDER BY.
has_one :subscription, -> { order 'created_at desc' }
Кто-нибудь понял, как совместить эти два?
Пробовал ли сортировать его в рубине в отличие от SQL? – hd1
Нет, но это может быть маршрут, необходимый, если Rails не позволяет комбинировать предложение where и order в одном и том же соотношении has_one, что, безусловно, удивительно. –