У меня есть следующая модель, которая использует ActiveStorage:
class ProofreadDocument < ApplicationRecord
has_one_attached :file
has_many :paragraphs, dependent: :destroy
scope :with_file_named, -> (filename) {
includes(:paragraphs).joins(file_attachment:
:blob).where("active_storage_blobs.filename = ?", filename).first}
Это работает очень хорошо, когда есть запись с подходящим именем файла.Однако, когда я выполняю поиск записи с несуществующим именем файла, он возвращает все записи.
pry(main)> ProofreadDocument.with_file_named("M6").count
ProofreadDocument Load (6.9ms) SELECT "proofread_documents".* FROM
"proofread_documents" INNER JOIN "active_storage_attachments" ON
"active_storage_attachments"."record_id" = "proofread_documents"."id" AND
"active_storage_attachments"."record_type" = $1 AND
"active_storage_attachments"."name" = $2 INNER JOIN "active_storage_blobs"
ON "active_storage_blobs"."id" = "active_storage_attachments"."blob_id"
WHERE (active_storage_blobs.filename = 'M6') ORDER BY
"proofread_documents"."id" ASC LIMIT $3 [["record_type",
"ProofreadDocument"], ["name", "file"], ["LIMIT", 1]]
(0.5ms) SELECT COUNT(*) FROM "proofread_documents"
=> 576
Как я могу это исправить, чтобы он возвращал 0 записей, если нет записи дляданное имя файла?