如何加入 has_many_attached Active Storage 关联?

pix*_*rth 2 ruby-on-rails rails-activestorage

我想做一个数据库查询来查找所有附加文件的记录。

class Departure 
  has_many_attached :pre_trip_documents
end
Run Code Online (Sandbox Code Playgroud)

然而这失败了:

Departure.joins(:pre_trip_documents).to_sql => #ActiveRecord::ConfigurationError (Can't join 'Departure' to association named 'pre_trip_documents'; perhaps you misspelled it?)
Run Code Online (Sandbox Code Playgroud)

wei*_*dia 7

你可以做:

Departure.joins(:pre_trip_documents_attachments)
Run Code Online (Sandbox Code Playgroud)

如果您查看其来源has_many_attached(可以在此处找到),这会更有意义。

总而言之,has_many_attached :pre_trip_documents结果是:

has_many :"pre_trip_documents_attachments", -> { where(name: "pre_trip_documents") }, as: :record, class_name: "ActiveStorage::Attachment" ...
Run Code Online (Sandbox Code Playgroud)

所以打电话Departure.joins(:pre_trip_documents_attachments)给你:

SELECT "departures".* FROM "departures" INNER JOIN 
"active_storage_attachments" ON 
"active_storage_attachments"."record_id" = "departures"."id" AND 
"active_storage_attachments"."record_type" = 'Departure' AND 
"active_storage_attachments"."name" = 'pre_trip_documents'
Run Code Online (Sandbox Code Playgroud)