用以下内容指定两个条件:if

时间:2011-07-30 09:27:44

标签: ruby-on-rails ruby activerecord validation

如果在视图中选中了复选框,我有一个验证属性是否存在的模型。

代码是这样的:

validates_presence_of :shipping_first_name, :if => :receive_by_email_is_unchecked

我期待这个验证的另一个条件。那我该如何做呢?

我的假设是这样的事情会发生:

validates_presence_of :shipping_first_name, :if => {:receive_by_email_is_unchecked,:form_first_step_validation}

我不确定这是否是这样做的写法?

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:1)

您可以在数组中传递方法名称:

validates_presence_of :shipping_first_name, :if => [:receive_by_email_is_unchecked, :form_first_step_validation]

或者,如果您不想仅为调节验证定义单独的方法,则可以使用proc:

validates_presence_of :shipping_first_name, :if => proc { !receive_by_email? && form_first_step_validation }

答案 1 :(得分:0)

我认为这不会起作用,但请查看validates_presence_of https://github.com/rails/rails/blob/master/activemodel/lib/active_model/validations/presence.rb的源代码

您可以构建自己的验证器来完成

答案 2 :(得分:0)

Ryan Bates在他的第一个Rails演员阵容中报道了这一点 http://railscasts.com/episodes/41-conditional-validations

虽然Rails v 3 +

的语法可能略有不同,但它仍然有效

我假设您正在使用Rails 2.x应用程序,因为您使用的语法不是Rails 3语法 Rails 3.x语法将是

validates :field_1, :field_2, :presence_of => true, :if =>#在这里使用proc或一系列条件。请参阅@jimworm和@MichałSzajbe提供的有关此问题的有效示例和评论