2011-06-10 212 views
2

我有樣板工程和驗證:Ruby on Rails的屬性驗證,方法,模型

validates_presence_of :name, :position, :tel 

項目也有另一種屬性,如:標誌。 我想這樣做: 如果輸入:name,:position,:tel,則:flag = true,如果其中一個屬性未指定,則:flag = false。

我該怎麼做,在哪裏?在模型中?

回答

1

您聲明驗證的方式,模型甚至不會保存,除非用戶輸入全部三個,因此將標誌設置爲false是沒有意義的。也就是說,如果要根據其他屬性的值在保存時間設置屬性,則可以使用callback hooks之一,如before_save。

class Project << ActiveRecord::Base 
    before_save :set_flag 

    protected 

    def set_flag 
    self.flag = (self.name.blank? || self.position.blank? || self.tel.blank?) ? false : true 
    end 
end 
+0

然後你可以設置一個驗證標誌... :) – DGM 2011-06-10 20:31:59

+0

謝謝,好!但是,如果刪除:tel,:name和:postion的驗證並將其留空,例如:tel屬性爲什麼您的方法不起作用?我怎樣才能解決它的模型沒有驗證? – Pyrchev 2011-06-11 01:10:26

+0

那麼,你的目標是什麼 - 國旗的目的是什麼?如果它們是有效的要求,爲什麼要刪除驗證?如果您只想知道該模型是否有效,那麼有更好的方法。 – Yardboy 2011-06-11 02:27:53