2011-06-10 119 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