2011-06-30 41 views
1

我想寫一個自定義驗證...人們在開始和結束時間進入一個網站,我試圖寫一個驗證,以檢查結束後開始。我試圖將它轉換爲Unix時間,但後來我得到一個noMethodError。我想將開始時間和結束時間的符號傳遞給這個方法,然後比較兩者。如何比較自定義驗證中的DateTime?

def validates_end_is_after_start(*attr_names) 

    start_hour = attr_names[0].to_i 
    end_hour = attr_names[1].to_i 

問題是,這最終會出現符號的noMethodError。但是那個符號指向一個DateTime對象(我認爲),我如何訪問該對象?我認爲我總體上對符號不瞭解。

回答

2

你可以使用validate方法,將有機會獲得型鑄造日期

class Something < ActiveRecord::Base 

    validate :valid_dates 

    def valid_dates 
    if start_time >= end_time 
     self.errors.add :start_time, ' has to be after end time' 
    end 
    end 

end 
+0

感謝這個,它的工作完美 – mill

+0

@PaulMiller - 沒問題。接受? – tamersalama

0

想象符號就像字符串,但功能和行爲作爲對象少得多。您應該更改您的代碼如下:

def validates_end_is_after_start(*attr_names) 
    start_hour = self.send(attr_names[0].to_sym).to_i 
    end_hour = self.send(attr_names[1].to_sym).to_i 
    # ... more code here 
end 

你也應該檢出真棒寶石,它是由處理的日期,時間和日期時間驗證。