Сортировка индекса через связанную таблицу?

У меня есть индекс, который отображает все созданные «dprojects». Я работаю над возможностью щелкнуть заголовки таблиц, чтобы отсортировать данные по этому параметру. У меня все работает, за исключением одного столбца. В этом столбце отображаются наши клиенты по номеру, который мы им назначили. Например, «Клиент А» - «008». В таблице «dprojects» есть столбец для идентификатора клиента, а « <table> <thead> <tr style = " border-bottom : 2px solid black ; " > <th> <% = сортируемый " scode " , " School " %> </ th> </ tr> </ thead> <tbody> <% @dprojects , где . нет ( статус : «Завершено» ). каждый делает | dproject | %> <tr> <td width = "20%" class = " dotted " > <% = dproject . школы . dname [ 0 , 25 ] + "..." %> </ td> </ tr> <% end %> </ tbody> </ table> s "имеет столбцы как для идентификатора, так и для фактического класса Dproject < ActiveRecord :: Base belongs_to : школы , foreign_key : 'SCODE' конец заказчика.

Поскольку это индекс «dprojects», таблица сортируется по идентификатору, связанному с клиентом, а не по имени клиента. Как я могу его сортировать по алфавиту по имени? Вот мой код:

view: (dname - имя клиента в школьной модели)

def index
    @dprojects = Dproject.order(params[:sort])
    respond_with(@dprojects)
end

модель:

module DprojectsHelper
    def sortable(column, title = nil)
        title ||= column.titleize
        link_to title, :sort => column
    end
end

контроллер:

<th> <%= sortable "dproject.school.dname", "School" %></th>

помощник:

dproject.school.dname

Я думал, что смогу изменить вид с помощью строки:

@dprojects

но это не работает. Что мне не хватает? Спасибо за любую помощь!

ruby-on-rails,

0

Ответов: 1


0

Полагаю, это потому, что нет такого столбца ( School) Book. Вам нужно присоединиться к таблицам, чтобы получить доступ также к столбцам модели School.

Я тестировал сортировку на модели Author Book, где , довольно похоже на вашу. Для сортировки на работу мне понравилось следующее:belongs_to :author sort_by = params[:sort] || 'author_name' @books = Book.joins(:author).select('books.name AS book_name, authors.name AS author_name').order(sort_by)

В контроллере есть таблица соединений, обратите внимание на псевдонимы (AS):

sort_by

Я использовал, nameчтобы избежать неоднозначной колонки name, так как для меня есть столбец имен в обеих моделях.

Тогда в поле зрения:

<p>id | <%= sortable 'book_name', 'Book' %> | <%= sortable 'author_name', 'Author' %></p>
<% @books.each do |book| %>
  <p><%= book.book_name %> | <%= book.author_name %> </p>
<% end %>
Рубин на рельсах,
Похожие вопросы
Яндекс.Метрика