Pragnę wyświetlić tabelę books posortowaną.
W books_controller.rb mam wpis:
def index
@books = Book.all.order(:title)
end
czyli sortuje po tytule. Jeżeli wpiszę:
def index
@books = Book.all.order(:author_id, :title)
end
to sortuje po id_autora i tytule ksiażki.
Czy można, a jeżeli tak, to jak, wylistować książki posortowane po nazwisku (authors.name) autora i w drugiej kolejności po tytułach (books.title)?
Czy też muszę kombinować z zapisywaniem danych w tabeli books, tak by w chwili “save” zapisywał mi nie tylko author_id ale też w dodatkowej kolumnie author_name?
(przyznam, że nie podoba mi się to, bo następuje redundancja danych i może być w przyszłości problem z integralnością ich)
możesz zrobić joina tabel books i authors. Jeśli zdefiniowałeś relację (np book belongs_to: :author), to Book.joins(:author).order(“authors.name, bookst.title”)
Nie chodzi mi o tworzenie modelu, reprezentującego joina (tak rozumiem Twoje BookAndAuthor, w activerecordzie to niekonwencjonalne rozwiązanie), tylko o użycie activerecordowej klauzuli joins na Book (zadziała, jeśli relacja z authors jest zdefiniowana, czyli w modelu Book masz belongs_to :author).
Efektem tego joina jest activerecordowe proxy, na którym możesz odpalać inne activerecordowe metody (m.in. order, przy czym w takim order dobrze jest użyć jednoznacznych nazw kolumn, czyli np order(“authors.name, books.title”)).