【问题标题】:Rails 3 - validating one of two fields has been completedRails 3 - 验证两个字段之一已完成
【发布时间】:2011-07-14 14:29:02
【问题描述】:

我正在编写一个 Rails 应用程序来管理我们网站顶部的一系列横幅;每个都应链接到编辑器提供的 URL,或从下拉列表中选择的特定产品。

为了与其他检查保持一致,我想在模型中进行某种验证,以确保在保存时提供了一个(但不是两个)字段(产品 ID 或 URL)。

有没有validates-type 的方法来检查这个,还是我必须把这个检查放在控制器的某个地方?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 validation model


    【解决方案1】:

    这是模型中非常直接的验证:

    validate :check_consistency
    
    def check_consistency
      if product_id.blank? and url.blank?
       #one at least must be filled in, add a custom error message
       return false
      elsif !product_id.blank? and !url.blank?
       #both can't be filled in, add custom error message
       return false
      else
       return true
      end
    end
    

    【讨论】:

    • 谢谢 - 这或多或少是它,虽然你的 elsif 不太正确。应该是 elsif (!product_id.blank? and !url.blank?) 否则,它可以很好地验证,而无需编写我自己的自定义验证器(我很害怕)。
    【解决方案2】:

    与上述类似的答案,但这只是一个排他性的 or 和 if else 语句不需要

    validate :check_consistency
    def check consistency
      errors.add(:base, 'message') if product_id.blank? ^ url.blank?
    end
    

    【讨论】:

    • 这不仅是已接受答案的更简洁版本,而且提供特定的错误消息比简单地返回 false 更有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多