2011-03-20 76 views
1

我正在使用Ruby on Rails 3,我想驗證提交ActiveRecord的單個屬性,而不是所有屬性。如何驗證提交ActiveRecord的單個屬性而不是所有屬性?

例如,在我的模型,我有:

validates :firstname, :presence => true, ... 
validates :lastname, :presence => true, ... 

我想對:firstname並在:lastname分別運行驗證。 這可能嗎?如果是這樣,我該如何做到這一點?


P.S:我知道,是爲了進行驗證有像「validates_presence_of」,「validates_confirmation_of」 ...的方法,但我想只使用上面的代碼。

+2

這個截屏你是什麼意思'separately'?會有2個電話來保存例如,還是隻有一個?你想要做什麼的用例/場景是什麼? – Zabba 2011-03-20 10:55:17

回答

-3

你可以刪除你的代碼的第二線之上,所以它讀取:名字:

validates :firstname, :presence => true 

沒有確認將被上進行。

問候

羅賓

+0

我想驗證':firstname'和(然後)分別驗證':lastname',所以我需要第二部分。 – user502052 2011-03-20 08:53:09

1
class Model < ActiveRecord::Base 
    def save(*attrs) 
    Model.validates :firstname, :presence => true if attrs.empty? || attrs.include?(:firstname) 
    Model.validates :lastname, :presence => true if attrs.empty? || attrs.include?(:lastname) 
    ... 
    super 
    end 
end 

m = Model.new 
m.save 
#=> false 
m.save(nil) # same as save(false), you can use both of them 
#=> true 
m = Model.new :firstname => "Putty" 
m.save 
#=> false 
m.save(:firstname, :lastname) 
#=> false 
m.save(:firstname) 
#=> true 
+0

不錯。但是,這不會覆蓋'ActiveRecord :: Validations'中的'save(options = {})'方法,因此'save(false)'將不再起作用嗎?不確定這一點,但也許你已經考慮到了這一點? – Zabba 2011-03-20 11:00:13

+0

@Zabba,好點,但實際上'save(false)'會忽略所有驗證,因爲attrs不會是空的,並且沒有任何名稱爲'false'的列名。但是 - 是的 - 它很hacky,我們可以簡單地重構此方法:) – fl00r 2011-03-20 11:08:30

相關問題