Я могу себе представить, User
и Users
испортят ваши соединения.Но учтите, что, насколько мне известно, это то, что рельсы не решают хорошо.Простое переименование его author
(при этом улучшая читаемость / лучше выражая намерение) не поможет, поскольку оно все равно будет указывать на ту же таблицу users
.
При выполнении нескольких соединений с рельсами очень трудно правильно выразить ваши условия.Rails создает псевдонимы для ваших таблиц на лету, к сожалению, я не нашел способа обратиться к этим псевдонимам в моих условиях.
Так что я думаю, что вам придется либо использовать sql ручной работы (который будет быстрым), либо использовать rails, и сначала сортировать сообщения по имени автора, а затем извлекать список отмеченных пользователей для каждого сообщения.второй (который будет медленнее, но чистый рубин).
Сначала я выбрал бы второй вариант и при необходимости оптимизировал бы его до первого.
[ОБНОВЛЕНИЕ: добавить определение области]
Лично я не одобряю default_scope
и вместо этого предложил бы определить явную область действия
scope :with_authors_sorted, lambda {
Post.includes(:type).includes(:user).
order('year DESC, week DESC, users.display_name ASC, posts.created_at DESC')
}
, которую вы затем можете просто использовать в своем контроллере.
@posts = Post.with_authors_sorted
Надеюсь, это поможет.