У меня 2 стола
class DepartmentBudget < ApplicationRecord
has_many :budget_details, dependent: :destroy
end
class BudgetDetail < ApplicationRecord
belongs_to :department_budget
end
У каждого отдела есть бюджеты на определенный период времени. и у каждого отдела есть много budget_details, которые состоят из всех записей по кредиту и дебету и поддерживают остаток.
Проблема в том, что я хочу применить сортировку бюджета отдела на основе баланса последней детали бюджета.
DepartmentBudget
.joins(:budget_details)
.select('budget_details.balance, department_budgets.*')
.order("budget_details.balance ASC")
.distinct
Я выполнил вышеуказанный запрос, но он возвращает повторяющиеся записи. проблема связана с предложением Выбрать, если я удалю select, то отдельные работы, но я должен использовать select с отличным. Любая помощь будет оценена.
У меня есть более проясненный пост
Если вам нужно применить сортировку на основе последней связанной записи budget_details, тогда столбец budget_details.created_at должен каким-то образом участвовать в запросе, чтобы найти последнюю созданную запись. Вы так не думаете?

DepartmentBudget.includes(:budget_details).order("budget_details.balance ASC")
Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти как написать хороший ответ очень полезным. Пожалуйста, отредактируйте свой ответ.
Непонятно, какова ваша цель, но если мы предположим, что ваш SQL логически верен, вам следует использовать предложение GROP BY и агрегатную функцию для достижения своей цели.
DepartmentBudget.joins(:budget_details)
.select('department_budgets.*, MIN(budget_details.balance)')
.group('department_budgets.id')
.order("MIN(budget_details.balance) ASC")
based on last record of budget detail's balance attributeЭта фраза сбивает с толку. У атрибута не может быть последней записи. Только таблица может иметь последнюю запись с несколькими атрибутами. Прошу уточнить вопрос