对于使用活动存储附件的所有型号,我都有一个上传表单。此格式的功能可以更改,具体取决于上传者是has_one_attached还是has_many_attached。有没有确定特定模型具有哪种关联类型的方法?
答案 0 :(得分:1)
您可以使用reflect_on_all_associations:
Account.reflect_on_all_associations # returns an array of all associations
Account.reflect_on_all_associations(:has_many) # returns an array of all has_many associations
我还没有尝试过,但我假设:
Model.reflect_on_all_associations(:has_one_attached)
如果模型为:has_one_attached,将包含一条记录,否则为空。
答案 1 :(得分:0)
我不喜欢这种方法,但是它有效。我所有的模型都只有一个附件关联。如果模型具有多个附件关联,则此操作会中断。我将继续对此进行微调。
def can_have_many_attachments?
uploader_name.present? &&
uploader_name.ends_with?('s')
end
def uploader_name
self.class.reflect_on_all_attachments.last.name.to_s
end
答案 2 :(得分:0)
以下似乎有效,至少对于Active Storage。
ModelName.reflect_on_all_associations.select { |a|
a.class_name == 'ActiveStorage::Attachment'
}
如果只需要属性名称:
ModelName.reflect_on_all_associations.select { |a|
a.class_name == 'ActiveStorage::Attachment'
}.map(&:name)