如果我在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
无论如何都有吗?谢谢!
答案 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_importing
,before_import_save
将为nil,并且由于评估为falsey,验证将在应用程序的正常操作期间按预期触发(即:不导入)。
正如我所说的那样,我没有测试任何这个,而且我或多或少地脱离了我的头脑,所以可能会有错误。尽管如此,我的感觉是利用导入钩子解决问题是你想要的。
答案 2 :(得分:0)
所以我的解决方案是分叉 rails_admin_import 并在 importer.rb
文件中更改了
if object.save
到
if object.save(:validate => false)