从数据表中的另一个表添加可排序列

Posted

技术标签:

【中文标题】从数据表中的另一个表添加可排序列【英文标题】:Adding sortable column from another tables in datatables 【发布时间】:2020-02-23 15:11:14 【问题描述】:
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

我真正想为用户列显示的是用户电子邮件,但用户电子邮件在用户表中。如何使用数据表实现这一点,并且仍然能够根据电子邮件而不是 blogs 表中的 user_id 进行排序?

【问题讨论】:

在 Rails 中使用 json 和 jbuilder 实现 Datatable 有更好的选择 @AbhishekAravindan 你能扩展一下吗? 我假设你需要一个关于博客的数据表,并且你需要它在博客索引页面上......是吗?? 是的,这将用于索引视图 你安装了吗gem 'jquery-datatables' ?? 【参考方案1】:

试试这个方法:

假设您将路由设置为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" ></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 实例变量

对于您的问题,如何在用户表中的用户列中显示电子邮件,假设您已经使用 blogs 表引用了用户表, 即

在您的博客模型中 你应该有一个关联:

belongs_to :user

现在您将通过blog.user.email 收到用户电子邮件

【讨论】:

当我能做到的时候,我为什么要做这一切:从控制器方法渲染 json: data: @blogdata

以上是关于从数据表中的另一个表添加可排序列的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Google 可视化表中的排序列

SQL Server:将列数据值从一个表复制到同一数据库中的另一个表

比较两个列并从同一个表中的另一列获取数据

转换后将数据从一列复制到同一表中的另一列

将数据从一个表加载到配置单元中的另一个表

如何用另一个表中的另一列替换一列数据?