Cel*_*lso 3 ruby-on-rails rails-activestorage
我是Rails的新手,正在尝试了解ActiveStorage的工作方式。
该应用程序具有以下模型:
class Client < ApplicationRecord
has_many :jobs
has_many :messages
end
class Job < ApplicationRecord
belongs_to :client
has_many_attached :images
end
class Message < ApplicationRecord
belongs_to :client
has_many_attached :images
end
Run Code Online (Sandbox Code Playgroud)
在数据库中,我可以看到多态关系,还可以了解哪种SQL查询可以为我带来所需的结果。
但是我想知道是否有一种惯用而有效的方法来检索与客户相关的所有附件?
您可以直接使用ActiveStorage::Attachment该类查询附件。该record属性是连接到附加类的多态关联。
这是一个例子
ActiveStorage::Attachment.where(record: Job.first)
Run Code Online (Sandbox Code Playgroud)
您还可以将一组记录传递给该record选项
ActiveStorage::Attachment.where(record: Job.all)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令找到与多组记录关联的附件 or
ActiveStorage::Attachment.where(record: Job.all).or(ActiveStorage::Attachment.where(record: Message.all))
Run Code Online (Sandbox Code Playgroud)
查找与与给定记录关联的多组记录关联的所有附件
client = Client.first
ActiveStorage::Attachment.where(record: client.jobs).or(ActiveStorage::Attachment.where(record: client.messages))
Run Code Online (Sandbox Code Playgroud)
它不是很漂亮,但是很有效。所有查询都是通过Active Record完成的,这意味着它在单个SQL语句中进行,不需要将任何对象加载到内存中。
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |