Я использую ActiveStorage для загрузки файлов через API. Моя модель «File» находится в пространстве имен «Loot», поэтому это «Loot :: Files». Файловая модель имеет ассоциацию (ActiveStorage) "has_many_attached: files".
User.rb
has_many :files, class_name: 'Loot::File'
loot / file.rb (Loot :: File)
has_many_attached :files
Хотя это работает (я могу вызвать user.files.files), действительно ужасно и неловко вызывать файлы в файлах.
Есть ли способ сохранить пространство имен "Loot", но нужно только вызвать user.files для доступа к файлам ActiveStorage? Я пытался использовать делегат, но, похоже, не работает делегирование коллекциям.
Обновление: я попробовал следующий делегат
Попробуйте 1
User.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
User.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 to Loot: Загрузка и использование следующего делегата
User.rb
delegate :files, to: :uploads
но тогда я получаю следующее при вызове User.first.files
NoMethodError (undefined method `files' for #<Loot::Upload::ActiveRecord_Associations_CollectionProxy:0x00007fdb96ca91c0>)