我正在嘗試驗證Rails 4應用程序中的某些日期,但它不工作。Rails 4.0自定義驗證器不工作
我看了很多類似的代碼示例,如Same custom validation for several fields in Rails和http://railscasts.com/episodes/211-validations-in-rails-3。 (和其他更復雜)。我不明白爲什麼我的例子不起作用。試圖找到問題,我已經剝離了實際的驗證代碼,並留下了一個存根,因爲驗證似乎沒有運行,這似乎是基本問題(或至少,第一個問題)。
下面是在驗證程序代碼(這是在應用程序/驗證/ custom_date_validator.rb
class CustomDateValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
puts "Custom validator was called"
record.errors[attribute] << "Date Not Valid" unless false
end
end
下面是來自模型的代碼:
class CaseInformation < ActiveRecord::Base
include ApplicationHelper
validates :started, :custom_date => true
的錯誤信息是:
argument out of range
Extracted source (around line #104):
respond_to do |format|
104 if (@case_information.update_attributes(params[:case_information]) && @case_information.update_attributes(params[:law_guardians]))
format.html { redirect_to @case_information, notice: 'Case information was successfully updated.' }
format.json { head :no_content }
錯誤是(我認爲)故意,我把一個日期「2012年1月1日」,但驗證程序不是捕捉它。好吧,實際上我刪除了所有的驗證代碼,並且(我認爲)驗證器寫入日誌,因爲它似乎並沒有驗證器運行,至少在日誌中沒有顯示它運行的任何東西。
我知道驗證代碼被找到,因爲在模型中,如果我更改驗證名稱,即使有點我也會得到一個錯誤,驗證無法找到。
真的愚蠢noob問題我相信,你的耐心是讚賞。
謝謝。
謝謝卡羅爾,還沒有檢查,但你說什麼似乎非常現貨。我想我必須做更多的研究來完成驗證。也許不把價值看作是它的屬性,而是像字符串一樣,看看我能否解析它?看起來很尷尬。有更容易的方法嗎?切換到Rails 4的問題?似乎Rails 3中有很好的日期驗證器,但在Rails 4中更少? – codenoob
你真的想解決什麼問題?如果您試圖阻止某人輸入無效日期,是不是正在進行類型轉換?你想讓人們輸入諸如「2012年1月1日」之類的東西嗎?如果你這樣做,那麼它是否真的是你想用於該屬性類型的日期呢? – carols10cents
謝謝卡羅爾。我試圖對你的評論投票,但我沒有代表這樣做。無論如何,我所要做的就是驗證Rails 4中的日期時間,並且我必須錯過一些東西,因爲它看起來並不直截了當。我似乎無法捕捉到類型轉換引起的異常,它在我的驗證程序啓動之前就已經消失了。我是否在控制器中的編輯操作周圍進行了陷阱? – codenoob