由于ActiveStorage的blob和attachment表是独立于应用程序的,它们需要使用FROM子句来连接到ActiveRecord模型,以使活动存储数据可用于排序。
以下是解决这个问题的例子:
class MyModel < ApplicationRecord
has_one_attached :avatar
scope :sorted_by_avatar_filename, lambda {
joins(<<-SQL)
left join active_storage_attachments on active_storage_attachments.record_id = my_models.id
left join active_storage_blobs on active_storage_blobs.id = active_storage_attachments.blob_id
SQL
.order('active_storage_blobs.filename asc')
}
end
这个例子展示了如何通过连接ActiveStorage blob和attachment表来对MyModel进行排序。使用lambda范围可以在查询中使用该表。
现在,可以使用以下命令来对MyModel进行排序:
MyModel.sorted_by_avatar_filename
上一篇:ActiveStorage:NoMethodError(未定义方法'[]'用于nil:NilClass)
下一篇:ActiveStorage:在预加载了附件的集合上检查 .attached? 方法(同时避免执行 n+1 次附件查询)