如何获取 rails 中所有孩子 active-storage 的附件?

How to get all childs active-storage attachments in rails?

假设有 2 个模型。

用户模型:

has_many :posts

post 型号:

belongs_to:用户

has_many_attached :files, 依赖: :destroy

我要的就是用户的所有文件。类似于:

有 _may :post_files , 通过: posts, class_name: "XXX"

或任何其他可以给我用户所有文件的方式。

所以我想要属于用户的所有 post 的所有文件。喜欢 user.post_files

结构应该是这样的

user.rb <-- 用户模型

has_many :posts

post.rb <-- Post 型号

belongs_to :user 
has_many_attached :files

这样你就可以做到

Post.post_files

Post.with_attached_files.find(params[:id])

总之。

附件属于 Post,不属于 User,因此无需调用 User 模型

您的 post 模型充当用户和附加文件之间的外部参照 table 对吧? 您已将一个用户定义为具有许多 post,将一个 post 定义为具有许多附件。使用 has_many through: 将允许用户查看 post

的所有附件

用户模型:

Class User < ...
  has_many :posts
  has_many attached_files, through: :posts

post 型号:

Class Post < ...
    belongs_to :user
    has_many_attached :files, dependent: :destroy

Class AttchedFiles < ...
  belongs_to :post

这使您可以执行以下操作

 User.first.attached_files

这将 return 用户的所有附件 return 由 User.first 声明

编辑

我相信这就是您要找的东西

谢谢大家的回答。我找到了解决方案。

has_many_attached :files实际上设置了两个has_many关系:

has_many :files_attachmentshas_many :files_blobs

所以在user.rb(父模型)中我们可以简单地有:

has_many :files_attachments, through: :posts

这样,您可以 user.files_attachments 获取一个用户的所有帖子文件。