2015-06-05 76 views
0

custom_form.html.erb扶手:date_select驗證

<%= f.date_select :creation_date %> 

我在和date型數據庫中有一個列creation_date。一切工作正常,但我需要在我的server.rb模型中驗證:creation_date
我需要驗證:

  1. 日期類型是有效的
  2. 最大\分鐘日期開始\期末

簡單:creation_date驗證validates_date :creation_date, presence =>true ...調用Undefined Method錯誤。
我在論壇上看到,如果日期無效,那麼我的:creation_date將被設置爲nil

我想我們可以檢查:creation_datenil值來處理列表中的1項?

我該如何執行第二項?

UPD(解決):

問題已在neasted模型。我試圖驗證我的用戶模型的屬性server.rb。我搬到驗證,user.rb,現在我能夠驗證:creation_datetimeliness gem

+1

使用'presence:true' .. –

+0

檢查這個http://stackoverflow.com/questions/597328/how-do-i-validate-a-date-in-rails –

+0

因爲如果它是無效的,那麼它將被設置爲零,並且存在將是錯誤的?我對嗎?那麼我的列表中的第二項呢? – Src

回答

2

試試這個:

class MyModel < ActiveRecord::Base 
    validate :mydate_is_date 

    private 

    def mydate_is_date 
    unless :mydate.is_a?(Date) 
     errors.add(:mydate, 'must be a valid date') 
    end 
    end 
end 
0

驗證:CREATION_DATE,存在:真

這方法來自默認的rails驗證,如果它是日期字段,它將檢查空白值或無效日期。

0

關於您的第一個項目,您已經得到了一些完全可以接受的答案(我將親自實施G.B.'s)。

關於你的第二項,它取決於你的界限是什麼。在我看來,最簡單的方法是簡單地比較日期對象。例如:

validate :mydate_is_within_range 

private 

def mydate_is_within_range 
    unless mydate > min_date && mydate < max_date 
    errors.add(:mydate, 'date must be within the allowed range') 
    end 
end 

現在,這依賴於具有日期格式的最小和最大的日期,但我懷疑已經有了嗎?無論如何,它應該讓你走上正軌。