2014-02-27 31 views
0

構建驗證程序,該驗證程序必須檢查屬於同一(選項)父級的多個兄弟姐妹。rails3自定義驗證重疊日期錯誤

class Optionrate < ActiveRecord::Base 
    belongs_to :option 

    attr_accessible :from, :to, :option_id 

    validates_presence_of :from, :to 

    validate :not_overlap 

    scope :overlaps, ->(from, to) do 
    where "((from <= ?) and (to >= ?))", to, from 
    end 

    def overlaps? 
    overlaps.exists? 
    end 

    def overlaps 
    siblings.overlaps from, to 
    end 

    def not_overlap 
    errors.add(:key, t('overlap_message')) if overlaps? 
    end 

    def siblings 
    Optionrate.where('option_id = ?', option_id).all 
    end 

正在生成的錯誤:「未定義的方法`重疊的[]:陣列」指的語句

siblings.overlaps from, to 

兄弟姐妹是複數這一事實使我假定它期待一個數組,所以這很奇怪。

[另一個原因是,其中聲明不接受*其中(「option_id =?」,則params [:option_id])*何處記錄尚待作爲驗證尚未完成創建]

+0

刪除'.all'在'siblings' – phoet

回答

1

請從Optionrate.where('option_id = ?', option_id).all中刪除.all後嘗試運行代碼,因爲當您使用.Where時,則不需要使用.all方法。

或者

就以下面的網址看看參考 http://guides.rubyonrails.org/3_2_release_notes.html#active-record

+0

是的,你和phoet擊中問題上發揮得淋漓盡致。現在,翻譯鍵不能使用i18n輔助方法t()。只有'overlap_message'運行。挖掘那一個! – Jerome

+0

如果重疊,試試'errors.add(:key,I18n.t:overlap_message)?'我希望你在翻譯文件中有** overlap_message **鍵。 –