Как заказать записи по одной из связанных с ней моделей?В приведенном ниже коде при доступе к ассоциации .box_chocolates
мне нужно, чтобы он возвращал записи, упорядоченные по Chocolate#name
:
b = Box.first
b.box_chocolates # <-- records must be ordered by Chocolate#name
Структура моделей:
class Box < ApplicationRecord
has_many :box_chocolates # <--- ???
end
class BoxChocolate < ApplicationRecord
belongs_to :box
belongs_to :chocolate
end
# id :integer
# name :string
class Chocolate < ApplicationRecord
end
Я создал собственный метод в классе Boxно мне не нравится, как это работает - он использует Ruby для сортировки записей вместо SQL-запроса:
def ordered_box_chocolates
box_chocolates.sort { |a, b| a.chocolate.name <=> b.chocolate.name }
end
Я знаю, что могу указать порядок в has_many
, как в коде ниже, но это не такработа:
class Box < ApplicationRecord
has_many :box_chocolates, -> { order("chocolate.name") }
end