Rails ActiveStorage область, когда файл НЕ прикреплен - PullRequest
1 голос
/ 02 мая 2020

При использовании ActiveStorage, как вы создаете область, когда файлы НЕ прикреплены.

Например:

class Check < ActiveRecord::Base
  has_one_attached :image
end

Я хочу, чтобы что-то вроде Check.has_no_attached_image возвращало только записи, где прикрепленного изображения не существует.

Найден ответ для случая, когда изображение прикреплено, но не наоборот
scope :has_attached_image, -> { joins(image_attachment: :blob) }

1 Ответ

1 голос
/ 02 мая 2020

Вы можете сделать это, используя left_joins с именем ассоциации (image + _attachment), которое интерпретируется как:

SELECT users.*
FROM users LEFT OUTER JOIN active_storage_attachments
ON active_storage_attachments.record_id = users.id
AND active_storage_attachments.record_type = 'User'
AND active_storage_attachments.name = 'image'

И затем примените фильтр WHERE, чтобы получить этого пользователя. строки без совпадения с таблицей active_storage_attachments:

User.left_joins(:image_attachment).where(active_storage_attachments: { id: nil })
...