验证失败时将关联属性设置为 nil

Setting an associated attribute to nil when a validation fails

在提交表单时,如果验证失败,我想将相关属性设置为 nil。在 rails 中有没有简单的方法来做到这一点?我认为存在一种方法,但我找不到一个。

你可以做一个 after_validation 回调...

class Model < ActiveRecord::Base

  after_validation :set_failed_attributes_to_nil

  def set_failed_attributes_to_nil
    errors.messages.each { |k, _| write_attribute(k, nil) }
  end

end
after_validation :remove_bad_attributes 

def  remove_bad_attributes
    if errors.any?
        errors.keys.each do |err|
            assign_attributes(err => nil)
        end
    end
end

以上对我来说效果很好。