Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 February 24

СН

Смерть Неизбежна in Ruby, Rails, Hanami | dry-rb
Maciej Buraczok
config/initializers?
+
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Всем привет. Начинаю пользоваться ActiveStorage, есть вопрос о том как удалять файлы которые он загрузил на диск, но не прикрепил к какой-либо записи? Допустим при загрузки файлов срабатывают валидации, и объект какого-нибудь условного продукта не создаётся, но файлы как я понял всё таки загрузились на диск.
Через rails console протестил по быстрому способ
ActiveStorage::Blob.all.each{ |blob_file| blob_file.purge if ActiveStorage::Attachment.all.where(blob_id: blob_file.id).length == 0}

Но пока файлов более менее немного это кажется неплохим вариантом, а что если их сотни будет... Можно конечно purge_later использовать. Но всё же, может есть какой-то ещё лучший способ удалять неиспользуемые файлы которые просачились при валидации? Или есть вариант на стадии валидации очищать файлы?
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Или вот на таком уровне удалять неприкрепелённые файлы?
источник

RI

Real Imp in Ruby, Rails, Hanami | dry-rb
Подскажите CableAction в production только на redis запускается?
Где посоветуете почитать об этом?
источник

DA

Dastan A.K in Ruby, Rails, Hanami | dry-rb
Ярослав Коробейников
Всем привет. Начинаю пользоваться ActiveStorage, есть вопрос о том как удалять файлы которые он загрузил на диск, но не прикрепил к какой-либо записи? Допустим при загрузки файлов срабатывают валидации, и объект какого-нибудь условного продукта не создаётся, но файлы как я понял всё таки загрузились на диск.
Через rails console протестил по быстрому способ
ActiveStorage::Blob.all.each{ |blob_file| blob_file.purge if ActiveStorage::Attachment.all.where(blob_id: blob_file.id).length == 0}

Но пока файлов более менее немного это кажется неплохим вариантом, а что если их сотни будет... Можно конечно purge_later использовать. Но всё же, может есть какой-то ещё лучший способ удалять неиспользуемые файлы которые просачились при валидации? Или есть вариант на стадии валидации очищать файлы?
Может быть...на уровне миграции таблицы (в самом файле миграции) сделать валидацию на условное обозначение...
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Миграции active_storage? Помоему это навряд ли. Просто я так понимаю при отправке запроса на бэк вместе с файлами, он их загружает себе, прикрепляет к объекту, а когда @product.save не проходит, то файлы остаются на диске не прикреплённые к объекту поскольку запись в ActiveStorage::Attachment не создаётся пока у объекта не id, а id появится после записи в базу
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Хммм.... как вариант на уровне опять того же контроллера чекать в params файлы, валидировать их до того как сложить params в Products.new, но так хочется оставить валидации на уровне модели))
источник

E

Evgeny in Ruby, Rails, Hanami | dry-rb
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Про прямую загрузку я тоже думал.... Чекать файл до загрузки  и если файл проходит валидации то всё ок. Если нет шли обратно ошибку и пускай пользователь другой файл выберет до того как нажмёт "Cоздать"
источник

DA

Dastan A.K in Ruby, Rails, Hanami | dry-rb
Ярослав Коробейников
Или вот на таком уровне удалять неприкрепелённые файлы?
ActiveStorage::Attachment.where(record: self).where.not(id: "#{name}_attachment".id).map(&:purge_later)

Может такой вариант поможет?
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Dastan A.K
ActiveStorage::Attachment.where(record: self).where.not(id: "#{name}_attachment".id).map(&:purge_later)

Может такой вариант поможет?
Не думаю, тут наоборот надо удалить записи ActiveStorage::Blob (а вместе с ними удалятся и файлы с диска) которых нету в ActiveStorage::Attachmen
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Хммм......Или я что-то вообще путаю...... Может у меня те файлы не прикреплённые к объектам вообще остались непонятно откуда..... Сейчас пытаюсь воспроисзвести тоже самое, валидации проверяют, но сохраннёных файлов не вижу..... БЛин наверное я туплю.....
источник

EK

Eugene Kubesh in Ruby, Rails, Hanami | dry-rb
Всем привет, а кто как реализует RBAC у себя? CanCanCan или как-то иначе?
источник

VE

Vitaliy Emeliyantsev in Ruby, Rails, Hanami | dry-rb
Eugene Kubesh
Всем привет, а кто как реализует RBAC у себя? CanCanCan или как-то иначе?
Pundit
источник

EK

Eugene Kubesh in Ruby, Rails, Hanami | dry-rb
А разве с его помощью rbac есть возможность реализовать? Есть может пример?
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
Eugene Kubesh
Всем привет, а кто как реализует RBAC у себя? CanCanCan или как-то иначе?
у меня библиотека позволяет это сделать от части
http://www.kanrb.org/roles
источник

ЯК

Ярослав Коробейников in Ruby, Rails, Hanami | dry-rb
Eugene Kubesh
Всем привет, а кто как реализует RBAC у себя? CanCanCan или как-то иначе?
источник

VE

Vitaliy Emeliyantsev in Ruby, Rails, Hanami | dry-rb
Eugene Kubesh
А разве с его помощью rbac есть возможность реализовать? Есть может пример?
Наверное есть, но я сам к этому пришел

Суть:
- Каждая политика policy pundit'а привязывается к своей модели
- Но никто не запрещает создавать субмодели вида Translatable::Post < Post и привязывать к ним политики вида Translatable::PostPolicy
- И никто не запрещает организовывать CRUD ресурсы по тому же принципу, namespace :translatable do resources :posts end и использовать внутри конкретную субмодель и конкретную политику
- В политике можно прописать доступы по любым полям пользователя (флаги для групп, емейлы для конкретных менеджерских аккаунтов, наличие ролей в отдельной таблице или json-е)
источник

EK

Eugene Kubesh in Ruby, Rails, Hanami | dry-rb
Vitaliy Emeliyantsev
Наверное есть, но я сам к этому пришел

Суть:
- Каждая политика policy pundit'а привязывается к своей модели
- Но никто не запрещает создавать субмодели вида Translatable::Post < Post и привязывать к ним политики вида Translatable::PostPolicy
- И никто не запрещает организовывать CRUD ресурсы по тому же принципу, namespace :translatable do resources :posts end и использовать внутри конкретную субмодель и конкретную политику
- В политике можно прописать доступы по любым полям пользователя (флаги для групп, емейлы для конкретных менеджерских аккаунтов, наличие ролей в отдельной таблице или json-е)
А как ты в UI передаешь пермишены? или у тебя UI рельсы рендерят?
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
Делаешь модель Permission, делаешь модель Role, связываешь их, передаешь
источник