У меня есть модель, которая имеет belongs_to
связь с другой моделью следующим образом
class Article
belongs_to :author, :class_name => "User"
end
Если бы я хотел найти все статьи для определенного жанра, заказанные автором, я сделал бы что-то вроде следующего
articles = Article.all(:includes => [:author], :order => "users.name")
Однако, если Article
имеет две ссылки на User
, как я могу отсортировать по :author
?
class Article
belongs_to :editor, :class_name => "User"
belongs_to :author, :class_name => "User"
end
Я пытался
articles = Article.all(:includes => [:author], :order => "users.name")
#=> incorrect results
articles = Article.all(:includes => [:author], :order => "authors.name")
#=> Exception Thrown
Моя первая попытка решения
Половина решения выглядит следующим образом. Это было не совсем очевидно, но, глядя на мои журналы, я понял это.
class Article
belongs_to :editor, :class_name => "User"
belongs_to :author, :class_name => "User"
end
В основном вам нужно сделать следующее
articles = Article.all(:include => [:editor,:author], :order => 'articles_authors.name')
articles = Article.all(:include => [:editor,:author], :order => 'authors_articles.name')
Это имя псевдонима, которое я пропустил (article_authors)
Проблема в том, что следующее не работает, хотя кажется, что должно.
articles = Article.all(:include => [:editor,:author], :order => 'authors_articles.name')
articles = Article.all(:include => [:editor,:author], :order => 'editors_articles.name')
Это может быть проблемой, если у вас есть таблица пользовательского интерфейса и вы хотите отправить поле заказа контроллеру. Так что вы можете сначала заказать автора, а затем редактора. Но для одного из запросов произойдет сбой (если только вы не измените динамически включение)