Добавление сортируемого столбца из других таблиц в таблицы данных - PullRequest
1 голос
/ 28 октября 2019
Rails 5.2
datatables

Я слежу за мини-учебником по реализации таблиц данных с помощью Rails. Таблица

 class BlogDatatable < AjaxDatatablesRails::ActiveRecord

  def view_columns
    @view_columns ||= {
      id:          { source: "Blog.id" },
      user:        { source: "Blog.user_id"}
      title:       { source: "Blog.title" },
    }
  end

  def data
    records.map do |record|
      {
          id:          record.id,
          title:       record.title,
          DT_RowId:    record.id,
      }
    end
  end

  def get_raw_records
    Blog.all
  end

end

То, что я действительно хочу отобразить для пользователя столбца, это электронная почта пользователя, но электронная почта пользователя находится в таблице Users. Как я могу реализовать это с таблицами данных, и все еще иметь возможность выполнять сортировку по электронной почте, а не по user_id, который находится в таблице блогов?

1 Ответ

1 голос
/ 29 октября 2019

Попробуйте этот метод:

Предполагая, что для маршрутов установлено значение resources: blogs

Ваша таблица в index.html.erb будет

<table class="responsive nowrap table table-hover" id="dttb-blogs" data-sort="true" data-source="<%= url_for(format: :json)%>">
 <thead>
  <tr>
   <th data-data="title">Title</th>
   <th data-data="user_email">User</th>
   <th data-data="url" data-orderable="false" data-class-name="all" data-searchable="false" class="skip-export" width="100px"></th>
  </tr>
 </thead>
</table>

Добавить _blog.json.jbuilder в блогах

json.extract! blog, :id, :title, :user_id, :created_at, :updated_at
json.user_email blog.user.email
json.url blog_url(blog, format: :json)

Добавить index.json.jbuilder в блогах

json.set! :data do
json.array! @blogs do |blog|
json.partial! 'blogs/blog', blog: blog
json.url  "
          #{link_to 'Show', blog }
          #{link_to 'Edit', edit_blog_path(blog)}
          #{link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' }}
          "
end
end

Это создаст данные с использованием объекта json, взяв переменную экземпляра @blogs из действия index

и на ваш вопрос, как отобразить электронную почту в столбце пользователя, который находится в пользовательской таблице. Предполагая, что вы связали пользовательскую таблицу с таблицей блогов, т.е.

в модели блогов, у вас должна быть ассоциация:

belongs_to :user

теперь вы получите электронное письмо от пользователя blog.user.email

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...