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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据另一个模型的属性 - RAILS,为一个模型使用不同的CarrierWave上传器相关的知识,希望对你有一定的参考价值。

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

CarrierWave Uploader文件不知道current_user是什么,所以我不能这样检查。我理解在Document模型中使用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

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

以上是关于根据另一个模型的属性 - RAILS,为一个模型使用不同的CarrierWave上传器的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails中保存包含另一个模型属性的模型?

在另一个模型控制器中使用的 Rails 3 虚拟属性

Rails“多重继承”模型-具有另一个类的属性的ActiveRecord对象?

在 Rails 6 中更新底层模型时如何使动作缓存过期?

Rails:需要帮助在另一个模型的视图中显示一个模型的表单

Rails 视图表以显示来自另一个模型的值