如何使用 ajax-datatables-rails 理解 Rails 中的包含

Posted

技术标签:

【中文标题】如何使用 ajax-datatables-rails 理解 Rails 中的包含【英文标题】:How to understand includes in Rails with ajax-datatables-rails 【发布时间】:2018-06-27 00:59:01 【问题描述】:

我正在使用ajax-datatables-rails 并想在数据表文件中使用关联模型,我想使用include() 方法。然而,事情并没有那么简单。根据https://github.com/jbox-web/ajax-datatables-rails 的说法,他们的include() 示例非常复杂,远远超出了我想要做的。

例如,我有一个名为 Page 的模型和一个名为 Book 的模型,我只想使用 Pages.include(:book) 以便稍后在我的视图中调用 page.book

我如何使用他们的方案来实现这一点?以下是我尝试过的方法,但没有奏效:

# app/datatables/example_datatable.rb
  # Allow the use of helpers in JSON response.
  def_delegators :@view, :link_to, :book_path

  def view_columns
    # Declare strings in this format: ModelName.column_name
    # or in aliased_join_table.column_name format
    @view_columns ||= 
      # id:  source: "User.id", cond: :eq,
      # name:  source: "User.name"

      position:  source: "Page.position",
      book_name:  source: "Page.book.book_name",
    
  end

  def data
    records.map do |record|
      
        # example:
        # id: record.id,
        # name: record.name
        position: record.position,
        book_name: link_to("#record.book.book_name", book_path(record), remote: true),
      
    end
  end

  private

  def get_raw_records
    # insert query here
    Page.includes(:book).references(:book).distinct
  end

如果我只是将它留在Pages.includes(:book),那么当我尝试使用搜索/过滤文本框时,我的数据表会出现错误。否则,一切都显示得很好。

我得到的错误状态:

“where 子句”中的未知列“pages.book”

在他们的示例中,他们声明 references(:related_model) 在这里,但我不确定如何使用我简单的单一模型关联来调整它。

【问题讨论】:

“没用”是什么意思?你观察到了什么?错误信息是什么?您是如何看到的? 我通过控制台看到了错误。它仍然给了我指南所说的错误:'where子句'中的未知列'pages.book',好像它不知道如何访问书。我也会用我的其余代码来更新它。 那么,您可以尝试这样做吗:Page.includes(:book).references(:book).distinct.to_sqlPage.includes(:book).references(:book).to_sql 看看它说了什么?有时这会让缺失的东西一目了然…… 据此:github.com/jbox-web/ajax-datatables-rails 看起来您可能需要将Book.name 放入您的@view_columns 而不是Page.book.name 并使用joins(:book) 而不是include/references 哇,@TarynEast 成功了。非常感谢!!!!!! 【参考方案1】:

根据ajax-datatables-rails README,您可能需要:

    Book.name 放入您的@view_columns 而不是Page.book.name 使用joins(:book) 而不是include/references

【讨论】:

以上是关于如何使用 ajax-datatables-rails 理解 Rails 中的包含的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 应用程序中转换 Javascript 数据表以使用 Opal

jquery-datatables-rails。响应式扩展和移动视图

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]