无需附件即可获取所有记录

时间:2019-09-23 06:30:07

标签: ruby-on-rails ruby rails-activestorage

使用ActiveStorage给出模型

scala_library(
    name = "my_jar",
    srcs = # ...
    deps = [
        "@maven//:com_chuusai_shapeless_2_12",
    ],
)

如何获取所有未附加ReportFile的文件所在的报告。

5 个答案:

答案 0 :(得分:1)

附件关联具有以下命名约定:_attachment。在您的情况下,这将是file_attachment。

由于这是常规的ActiveRecord关联,因此可以使用它进行联接。那么,您要查找的查询是:

Record.where(id: RecordFile.where.not(id: RecordFile.joins(:file_attachment)).pluck(:record_id)) 

答案 1 :(得分:0)

Rails 5中有一种left_joins方法,因此您可以使用它代替includes(或eager_load,在这里工作原理相同),因为在这种情况下它更适合。此外,为获得所需内容,您真正应该联接的表是active_storage_attachment,它与file_attachmentReportFile相关联。因此,我认为获得所需东西的最好方法是:

Report.left_joins(report_file: :file_attachment).where(active_storage_attachments: { id: nil })

答案 2 :(得分:0)

Report.joins("left join report_files on reports.id = report_files.report_id").where("report_files.file is null")

可以工作

答案 3 :(得分:-1)

Report.eager_load(:report_file).where(report_file: {file: nil})

应该工作

答案 4 :(得分:-1)

Report.includes(:report_files).where('report_files.file =?',nil)

参考: https://apidock.com/rails/ActiveRecord/QueryMethods/includes