Rails Active Storage с мультитенантностью с использованием квартиры gem

У меня есть приложение rails с мультитенантностью, реализованное с использованием квартиры gem. У меня есть модель Report, которая исключена из мультитенантности, то есть общая для всех арендаторов.

# app/models/report.rb
class Report < ApplicationRecord
  has_one_attached :file
  ...
end
# config/initializers/apartment.rb
Apartment.configure do |config|
  config.excluded_models = %w{ Tenant User Report }
  ...
end

В ReportsController:

  ...

  def upload
    @record = Report.find(params[:report_id])
    record.file.attach(params[:file])
    head 200
  end

  ...

Когда я загружаю файл, active_storage обновляет только схему, действительную для текущего клиента. Но поскольку модель отчета не зависит от арендатора, я хочу, чтобы прикрепленные файлы также не зависели от арендатора.

Есть ли способ добавить таблицы active_storage в список / схему исключенных моделей?


person Rahul    schedule 24.09.2019    source источник


Ответы (1)


Есть ли способ добавить таблицы active_storage в список / схему исключенных моделей?

нет, я думаю.

Если вы добавите ActiveStorage :: Attachment и ActiveStorage :: Blob в список исключенных моделей, все данные файла будут сохранены в общедоступной (не тенантной) базе данных.

Итак, я использую Apartment :: Tenant.switch.

в вашем случае вот так:

  def upload
    Apartment::Tenant.switch('db name you want to use') do
      @record = Report.find(params[:report_id])
      record.file.attach(params[:file])
      head 200
    end
  end
person gozaru    schedule 21.10.2019
comment
Вот что я в итоге сделал. - person Rahul; 21.10.2019
comment
Вам нужно было после этого показать изображение со сгенерированным URL-адресом? Или вам нужно перезаписать ActiveStorage :: BlobsController # show, чтобы сначала сменить арендатора? - person syafiq faiz; 29.01.2020