僅當

2011-04-27 32 views
0

有效時,我需要驗證值的存在,但僅在填充值後。當創建用戶時,不需要設置shortcut_url。但是,一旦用戶決定選擇一個shorcut_url,他們不能刪除它,它必須是唯一的,它必須存在。僅當

如果我使用validates_presence_of,由於未定義shortcut_url,所以不會創建用戶。如果我使用:allowblank => true,那麼用戶可以將「」作爲shortcut_url,它不遵循網站的邏輯。

任何幫助將不勝感激。

回答

1

在這裏,我們總是會確保shortcut_url是獨一無二的,但我們只是要確保,如果shortcut_selected屬性設置存在的話(或者如果已設置,現在已更改)

class Account 
    validates_uniqueness_of :shortcut_url 
    with_options :if => lambda { |o| !o.new_record? or o.shortcut_changed? } do |on_required| 
    on_required.validates_presence_of :shortcut_url 
    end 

end 

您需要進行測試以確保它可以很好地處理新記錄。

+0

仍然沒有... – 2011-04-27 20:46:47

+0

說謊...實施不正確。你贏了。 – 2011-04-27 20:50:51

0

嘗試:allow_nil選項,而不是:allow_blank。這將防止空字符串驗證。

編輯:在創建用戶時是否將空字符串分配給了shortcut_url,然後呢?也許嘗試:

class User < ActiveRecord::Base 
    validates_presence_of :shortcut_url, :allow_nil => true 

    def shortcut_url=(value) 
    super(value.presence) 
    end 
end 
+0

沒有這樣的運氣。仍然不會創建一個用戶... – 2011-04-27 20:26:37

+0

我發現了一些錯誤報告,但是,與allow_nil – 2011-04-27 20:34:28

0

嘗試有條件的驗證,是這樣的:

validates_presence_of :shortcut_url, :if => :shortcut_url_already_exists? 
validates_uniqueness_of :shortcut_url, :if => :shortcut_url_already_exists? 

def shortcut_url_already_exists? 
    @shortcut_url_already_exists ||= User.find(self.id).shortcut_url.present? 
end 
+0

有關我喜歡你,但仍然不好。 Rails2.X的方式... – 2011-04-27 20:44:39