簡體   English   中英

Rails 3自定義驗證器問題

[英]Rails 3 Custom Validator Problem

我需要對模型應用驗證,以便記錄中的2個整數值(最小值和最大值)形成一個包含范圍(例如2和3都可以,但4和1不是)。 據我所知,由於我需要在同一記錄中相互驗證2個值,我必須使用ActiveModel :: Validator(而不是ActiveModel :: EachValidator)。 所以,我嘗試以下方法:

型號(app / models / position.rb):

class Position < ActiveRecord::Base
  validates_with InclusiveRangeValidator
end

Validator(app / lib / validators / inclusive_range_validator.rb):

class InclusiveRangeValidator < ActiveModel::Validator
  def validate(record)
    record.errors[:base] << "#{record.minimum} and #{record.maximum} do not form a valid inclusive range." unless record.minimum < record.maximum
  end
end

我已經讀過Rails 3.0.5不再自動加載lib目錄了,所以我在config / application.rb中添加了這一行:

config.autoload_path += %W({config.root}/lib)

然后我重置rails服務器,因此它將更改為config / application.rb。 我運行我的單元測試,它試圖運用模型來證明這個驗證是有效的。 我收到此錯誤:

uninitialized constant: Position::InclusiveRangeValidator (NameError)

我認為發生的事情是Rails沒有識別/找到我的自定義驗證器類,因此它假定InclusiveRangeValidator是它引用的類中的常量。但是,我認為我對config / application.rb所做的更改會放我的驗證器在加載路徑中,以便它可用。

我已經瀏覽了StackOverflow上的其他帖子並沒有提出解決方案,而且我已經閱讀了有關驗證器的API文檔,但無濟於事。 我必須做一些簡單而愚蠢的事情,但我看不出是什么問題。 有幫助嗎?

編輯 :經過更多的搜索,我發現我根本不需要自定義驗證器,因為我可以用這個完成相同的目標:

validates :minimum, :numericality => {:greater_than_or_equal_to => 0 }
validates :maximum, :numericality => {:greater_than => :minimum }

但是,問題仍然是Rails無法找到自定義驗證類的原因。

有一次,我將application.rb中的行更改為:

config.autoload_paths += %W[#{config.root}/lib/validators/]

Rails能夠找到加載我的自定義驗證器的正確途徑。 我犯了錯誤,假設Rails會自動遞歸目錄結構,顯然不是這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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