根据另一个模型的属性对一个模型使用不同的 CarrierWave 上传器 - RAILS

Use different CarrierWave uploaders for one Model based on attributes of another Model - RAILS

我正在开发一个 Rails 项目,用户(模型 "User")可以上传文档(模型 "Document")。我正在使用 CarrierWave 上传文件。用户可以拥有不同类型的帐户(免费或高级)。如果用户有免费帐户,我只想允许他们上传某些类型的文件。

CarrierWave Uploader 文件不知道 current_user 是什么,所以我无法那样检查。我明白在文档模型中使用 current_user 是不好的做法。

我处理这个问题的最佳方法是什么?

def extension_white_list
  return %w(jpg jpeg gif png pdf docx) if model.user.account_type?(:free)
  %w(jpg jpeg gif png pdf docx doc xlsx xls odt ods csv txt)
end

您可以通过变量 model 访问 uploader 中的 Document 模型。如果 Document 模型通过关系连接到 User 模型,您可以执行上面给出的操作。请注意,您必须在 User 模型中定义 account_type 方法。