我正在使用 ActiveStorage 通过 API 上传文件。我的“文件”模型在“Loot”下命名,所以它是“Loot::Files”。文件模型有一个关联(ActiveStorage)“has_many_attached :files”。
用户.rb
has_many :files, class_name: 'Loot::File'
战利品/file.rb(战利品::文件)
has_many_attached :files
虽然这有效(我可以调用 user.files.files),但在文件上调用文件真的很丑陋和尴尬。
有没有办法保留命名空间“Loot”但只需要调用 user.files 来访问 ActiveStorage 文件?我尝试使用委托,但它似乎无法委托给集合。
更新:我尝试了以下代表
试试 1
用户.rb
delegate :files, to: "Loot::File"
这样,调用“User.first.files”,我收到以下错误
Traceback (most recent call last):
2: from (irb):3
1: from app/models/user.rb:46:in `files'
NoMethodError (undefined method `files' for Loot::File(id: integer, user_id: integer):Class)
试试 2
用户.rb
delegate :files, to: :files
错误:
Traceback (most recent call last):
16: from app/models/user.rb:46:in `files'
15: from app/models/user.rb:46:in `files'
14: from app/models/user.rb:46:in `files'
13: from app/models/user.rb:46:in `files'
12: from app/models/user.rb:46:in `files'
11: from app/models/user.rb:46:in `files'
10: from app/models/user.rb:46:in `files'
9: from app/models/user.rb:46:in `files'
8: from app/models/user.rb:46:in `files'
7: from app/models/user.rb:46:in `files'
6: from app/models/user.rb:46:in `files'
5: from app/models/user.rb:46:in `files'
4: from app/models/user.rb:46:in `files'
3: from app/models/user.rb:46:in `files'
2: from app/models/user.rb:46:in `files'
1: from app/models/user.rb:46:in `files'
SystemStackError (stack level too deep)
尝试 3 - 重命名
我尝试将 Loot::Files 重命名为 Loot:Uploads 并使用以下委托
用户.rb
delegate :files, to: :uploads
但后来我在调用 User.first.files 时得到以下信息
NoMethodError (undefined method `files' for #<Loot::Upload::ActiveRecord_Associations_CollectionProxy:0x00007fdb96ca91c0>)