Сортировка индекса по связанной таблице? - PullRequest
0 голосов
/ 24 июня 2018

У меня есть индекс, который отображает все текущие созданные dprojects.Я работаю над возможностью щелкать заголовки таблицы, чтобы отсортировать данные по этому параметру.У меня все это работает, за исключением одного столбца.В этом столбце отображаются наши клиенты по номеру, который мы им присвоили.Например, «Клиент А» - это «008».В таблице «dprojects» есть столбец для идентификатора клиента, а в таблице «школы» есть столбцы как для идентификатора, так и для фактического имени клиента.

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

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

<table>
  <thead>
    <tr style="border-bottom: 2px solid black;">
      <th> <%= sortable "scode", "School" %></th>
    </tr>
  </thead>

  <tbody>
    <% @dprojects.where.not(status: "Completed").each do |dproject| %>
      <tr>
        <td width="20%" class="dotted"><%= dproject.school.dname[0,25] + "..." %></td>
      </tr>
    <% end %>
  </tbody>
</table>

модель:

class Dproject < ActiveRecord::Base
    belongs_to :school, foreign_key: 'scode'
end

контроллер:

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

helper:

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

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

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

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

1 Ответ

0 голосов
/ 25 июня 2018

Полагаю, это потому, что в @dprojects такого столбца нет (dproject.school.dname).Вам необходимо объединить таблицы, чтобы получить доступ и к столбцам модели School.

. Я проверил сортировку по модели Book Author, где Book belongs_to :author, довольнопохож на ваш.Чтобы сортировка работала, мне нужно сделать следующее:

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

sort_by =  params[:sort] || 'author_name'
    @books = Book.joins(:author).select('books.name AS book_name, authors.name AS author_name').order(sort_by)

Я использовал sort_by, чтобы избежать неоднозначного столбца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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...