在模型中导入rails_admin时跳过验证

时间:2016-02-28 15:00:52

标签: ruby-on-rails ruby ruby-on-rails-4 rails-admin

如果我在rails_admin_import中导入它,我如何跳过模型中字段的验证?像:

Class Dog < ActiveRecord::Base
has_many :dog_quantity
has_many :dog_price
validates_presence_of :dog_quantity, :dog_price, :on => :import
end

无论如何都有吗?谢谢!

3 个答案:

答案 0 :(得分:0)

也许尝试在RailsAdmin mailing list上提问。

您可能还想阅读“Get Rid of Your Admin Gem”。

并且,您是否仔细研究了conditional validation上的“活动记录验证指南”部分?

答案 1 :(得分:0)

首先,请注意。我不使用rails_admin或rails_admin_import gem。但是,根据https://github.com/stephskardal/rails_admin_import#import-hooks的文档,您可以:

  

在模型上定义要挂钩到导入的实例方法   过程,如果数据需要特殊/额外处理:

像这样:

class User < ActiveRecord::Base
  def before_import_save(record)
    # Your custom special sauce
  end

  def after_import_save(record)
    # Your custom special sauce
  end
end

知道这一点,你可以在模型/记录上设置一个临时标志,称为is_importing钩子内的#before_import_save,并根据其值进行有条件验证。例如:

Class Dog < ActiveRecord::Base
  has_many :dog_quantity
  has_many :dog_price
  validates :dog_quantity, presence: true, unless: :is_importing
  validates :dog_price, presence: true, unless: :is_importing

  attr_accessor :is_importing

  def before_import_save(record)
    record.is_importing = true         
  end
end

这里有几点需要注意。首先,我将验证分为两个语句。其次,我正在使用我认为在Rails 4中可用的更新式验证语法。传统上,这种风格是首选。如果你正在使用Rails版本&lt; 4,然后回到使用validates_presence_of,它应该仍然有效。第三,如果永远不会调用is_importingbefore_import_save将为nil,并且由于评估为falsey,验证将在应用程序的正常操作期间按预期触发(即:不导入)。

正如我所说的那样,我没有测试任何这个,而且我或多或少地脱离了我的头脑,所以可能会有错误。尽管如此,我的感觉是利用导入钩子解决问题是你想要的。

答案 2 :(得分:0)

所以我的解决方案是分叉 rails_admin_import 并在 importer.rb 文件中更改了

if object.save

if object.save(:validate => false)