2012-05-28 16 views
0

我正在嘗試爲我的store.website寫一個自定義驗證。我想要的方法來檢查網站字段是否以http://https://開頭。這是我試過的:確認字段並在驗證時使用「http://」開始

class Store < ActiveRecord::Base 
    validate :website_has_correct_format 

    def website_has_correct_format 
    self.website = self.website.downcase.start_with?(/https?:\/\//, '') 
    end 
end 

雖然這不起作用。由於一些奇怪的原因,它確實保存了字母t

這樣做的正確方法是什麼?另外,我可以把:message也加入它嗎?

+0

不會教你如何編寫一個自定義的評估值validates_format_of被內置到rails中,並執行此操作 –

回答

2
  1. 不要修改驗證器中的值;驗證器應該驗證現有數據而不改變它。

  2. start_with?方法將正常String作爲參數,而不是Regexp

所以,你可以實現你的驗證程序是這樣的:

def website_has_correct_format 
    errors.add(:website, "Wrong website") unless website.downcase.start_with?('https://', 'http://') 
end 
1

start_with? returns true or false - 給出一個字符串參數。

你也正在驗證與設置一個值 - 驗證是或否;爲什麼你要在驗證方法中設置屬性值?

1

在驗證你不應該修改模型數據,對於這個你有before_save行動。驗證器應該看起來如下:

def website_has_correct_format 
    errors.add(:website, 'Wrong website') unless website =~ %r{\Ahttps?://} 
end 
相關問題