1

我有一个Upload文件上传模型,它在具有多态关联的其他模型之间共享。

# upload.rb
class Upload < ApplicationRecord
  include ImageUploader[:image]
  include VideoUploader[:video]
  include BackgroundUploader[:background]

  belongs_to :uploadable, polymorphic: true
end

# product.rb
class Product < ApplicationRecord
  has_many :uploads, as: :uploadable, dependent: :destroy
end

# announcement.rb
class Announcement < ApplicationRecord
  has_many :uploads, as: :uploadable, dependent: :destroy
end

# site.rb
class Site < ApplicationRecord
  has_many :uploads, as: :uploadable, dependent: :destroy
end

...

Upload连接到不同的Shrine上传器,例如ImageUploader,BackgroundUploaderVideoUploader, 以上传和处理不同的文件类型。为此,Upload 为每种文件类型设置了不同的列,例如image_datavideo_databackground_data

现在,一个关联的“父母”Upload应该只支持某些文件类型。当关联到…</p>

  • Product,它应该只允许上传图片和视频
  • Announcement,它应该只允许图片上传
  • Site,它应该只允许后台上传

如何Upload根据与父记录的关联来验证模型?这种验证应该发生在它的父模型中upload.rb还是在它的父模型中?

就代码而言,Upload应该只允许与父级关联的各个字段。像……</p>

if upload.parent == product
  validate presence image_data xor video_data

if upload.parent == announcement
  validate presence of image_data

if upload.parent == site
  validate presence of background_data

谢谢!

4

0 回答 0