附加文件的Rails ActiveStorage范围

时间:2018-11-07 23:24:52

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

使用ActiveStorage时,如何创建文件附加范围。

例如:

class Check < ActiveRecord::Base
  has_one_attached :image
end

我希望像Check.has_attached_image这样的东西只返回存在现有附件图像的记录。

我知道ActiveStorage提供了with_attached_image范围。但这似乎不起作用:

irb(main):009:0> Check.with_attached_image.to_sql => "SELECT \"checks\".* FROM \"checks\""

1 个答案:

答案 0 :(得分:2)

范围with_attached_image的主要目的是避免进行N + 1个查询(在查询中包含附加的Blob)。

要仅返回存在现有附件图像的记录,可以在Check模型中创建范围,如下所示:

scope :has_attached_image, -> { joins(image_attachment: :blob) }