跳过rails

时间:2017-05-07 17:07:31

标签: ruby-on-rails

我试图保存名为Upload的模型,该模型具有名为uploadable的多元关联。

现在我正在做一个dropzone js区域,用户可以拖放文件,它应该在服务器端创建上传,然后返回一些将添加到html中的密钥,并且只有在用户保存表单(如果用户保存表单,我将使用刚创建的评论设置uploadable_id和uploadable_type,否则上传将在24小时内通过cronjob自动删除)

我遇到的唯一问题是当我执行@ upload.save

时,rails会自动希望uploadable_id e uploadable_type存在

如何仅针对uploadable属性跳过验证(在线状态)?我想避免使用@ upload.save(validate:false),因为它会跳过所有验证而不只是一个验证。

我尝试过使用虚假属性:

class Upload < ApplicationRecord
  belongs_to :uploadable, polymorphic: true
  has_attached_file :file

  attr_accessor :skip_uploadable_validation

  validate :uploadable, unless: :skip_uploadable_validation

end

然后我这样做:

@upload = Upload.new
@upload.file = params[:file]
@upload.skip_uploadable_validation = true

@upload.save # it fails anyway

但它不起作用。

1 个答案:

答案 0 :(得分:0)

您可以将optional: true放到此行:

belongs_to :uploadable, polymorphic: true, optional: true

或者用这种方式:

with_options unless: :skip_uploadable_validation do
  validates :uploadable_id, presence: true
  validates :uploadable_type, presence: true
end