Reject_if +添加错误

时间:2019-06-04 13:56:09

标签: ruby-on-rails ruby

我有一个模型Order,其中可能有很多texts

文本可以有一个主动存储附件,我用active_storage_validations gem验证了此附件。

我想保存有效的文本并拒绝无效的文本,因此我在reject_if上使用了accepts_nested_attributes_for选项...但是我想保留错误然后如果文本已经被渲染则呈现表格。拒绝了。

这是我的代码:

class Order < ApplicationRecord
  has_many :texts, dependent: :destroy, validate: false
  accepts_nested_attributes_for :texts, allow_destroy: true, reject_if: :invalid_text?

  def invalid_text?(attributes)
    text = Text.new(attributes.tap { |att| att.delete(:_destroy) })
    return if text.valid?

    text.errors.full_messages.each do |msg|
      errors.add(:base, msg)
    end
  end
end

然后在我的控制器中

def update
  if @order.update(order_params)
    @order.update!(creation_step: 'instructions')
    check_if_documents(@order, params[:file_upload_method])

    Text.counter_culture_fix_counts
    jump_to(:instructions)
  else
    flash.now.alert = @order.errors.full_messages.join('. ') if @order.errors.messages.any?
    render(:show)
  end
end

问题在于reject_if之后会调用@order.update,所以永远不会出错。

如何在访问活动存储属性的同时,在父更新之前验证嵌套属性?

如果我正在执行before_validation回调,则无法使用nested_attributes_options方法访问ActiveStorage属性...

0 个答案:

没有答案