Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取所有不带附件的记录_Ruby On Rails_Ruby_Rails Activestorage - Fatal编程技术网

Ruby on rails 获取所有不带附件的记录

Ruby on rails 获取所有不带附件的记录,ruby-on-rails,ruby,rails-activestorage,Ruby On Rails,Ruby,Rails Activestorage,给出了一个带有ActiveStorage的模型 课堂报告 有一个:报告文件 结束 类报告文件 属于:报告 附件:文件 结束 如何获取ReportFile中未附加文件的所有报告 Report.eager_load(:report_file).where(report_file: {file: nil}) “应能工作”附件关联具有以下命名约定:\u附件。在您的情况下,这将是文件附件 因为这是一个常规的ActiveRecord关联,所以您可以使用它进行连接。那么,您要查找的查询是: Record.

给出了一个带有ActiveStorage的模型

课堂报告
有一个:报告文件
结束
类报告文件
属于:报告
附件:文件
结束
如何获取ReportFile中未附加文件的所有报告

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

“应能工作”

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

因为这是一个常规的ActiveRecord关联,所以您可以使用它进行连接。那么,您要查找的查询是:

Record.where(id: RecordFile.where.not(id: RecordFile.joins(:file_attachment)).pluck(:record_id)) 
Report.includes(:Report\u files).where('Report\u files.file=?',nil)

参考:
Rails 5中有
left_joins
方法,因此您可以使用此方法来代替
includes
(或
渴望加载
,其工作方式与此相同),因为它更适合这种情况。此外,要获得所需内容,您真正应该加入的表是
活动存储\u附件
,它与
文件\u附件
关联到
报告文件
。因此,我认为得到你想要的最好的方法是:

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

将起作用

report\u files
查询中的表名不起作用,在
report\u files
table中没有
file
这样的列。同意。这个想法更倾向于使用“includes”,我们可以根据activestorage生成的列将where条件更改为
Report.joins("left join report_files on reports.id = report_files.report_id").where("report_files.file is null")