[英]Skip validations in importing rails_admin in model
如果將其導入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
反正有做嗎? 謝謝!
首先,警告。 我不使用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
知道了這一點,您可以在模型/記錄上的#before_import_save
鈎子內部設置一個稱為is_importing
之類的臨時標志,並根據其值有條件地進行驗證。 例如:
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版本<4,請返回使用validates_presence_of
,它仍然可以正常工作。 第三,如果從不調用before_import_save
,則is_importing
將為nil,並且由於評估為false,因此將在應用程序正常運行期間(如:未導入)按預期觸發驗證。
就像我說的,我沒有測試任何一個,我或多或少都落在了頭上,所以可能有錯誤。 盡管如此,我的感覺是要使用導入掛鈎來解決問題。
所以我的解決方案是派生rails_admin_import,並在importer.rb
文件中更改了
if object.save
進入
if object.save(:validate => false)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.