Как уже упоминалось в моем комментарии, требуется файл app/models/active_storage_attachment.rb
с таким содержимым:
class ActiveStorageAttachment < ApplicationRecord
enum visibility: [ :privately_visible, :publicly_visible]
end
Затем вам также нужно добавить видимость столбца типа integer в таблицу active_storage_attachments
.
class AddVisibilityToActiveStorageAttachments < ActiveRecord::Migration[5.2]
def change
add_column :active_storage_attachments, :visibility, :integer
end
end
Доступ к новому столбцу ActiveStorageAttachment
Я делаю пример на моей модели: у меня есть пользователь, который has_one_attached: avatar.
Я могу получить доступ к таблице active_storage_attachments через user.avatar.attachment.inspect
, который возвращает, например, #<ActiveStorage::Attachment id: 1, name: "avatar", record_type: "User", record_id: 1, blob_id: 3, created_at: "2018-06-03 13:26:20", visibility: 0>
.
Обратите внимание, что значение столбца visibility
является чистым целым числом, не преобразованным массивом visibility
(IЯ все еще задаюсь вопросом, почему).
Один из возможных обходных путей - определить метод, подобный avatar_attachment
в модели пользователя, например:
class User < ApplicationRecord
has_one_attached :avatar
def avatar_attachment
ActiveStorageAttachment.find_by(name: 'avatar', record_type: 'User', record_id: self.id)
end
end
Теперь user.avatar_attachment.inspect
возвращает #<ActiveStorageAttachment id: 1, name: "avatar", record_type: "User", record_id: 1, blob_id: 3, created_at: "2018-06-03 13:26:20", visibility: "privately_visible">
Теперь доступны все методы, связанные с массивом видимости.Также работает обновление записи:
user.avatar_attachment.publicly_visible! # => true