使用公寓gem的多租户Rails Active Storage

时间:2019-09-24 05:12:49

标签: ruby-on-rails ruby-on-rails-5 rails-activestorage apartment-gem

我有一个使用Apartment gem实现多租户的Rails应用程序。 我有一个称为报告的模型,该模型被排除在多租户之外,即所有租户都通用。

# 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表?

1 个答案:

答案 0 :(得分: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