簡體   English   中英

跳過模型中導入rails_admin的驗證

[英]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

反正有做嗎? 謝謝!

也許嘗試在RailsAdmin 郵件列表上提問。

您可能還想閱讀“ 擺脫管理寶石 ”。

而且,您是否仔細研究了《 Active Record驗證指南》中有關條件驗證的部分?

首先,警告。 我不使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM