【问题标题】:ArgumentError: You need to supply at least one validation with :ifArgumentError:您需要使用 :if 提供至少一个验证
【发布时间】:2012-01-07 02:31:00
【问题描述】:

我有一个简单的模型

class Task < ActiveRecord::Base
  validates :deadline, :if => :deadline_in_future?

  def deadline_in_future?
    Date.today < self.deadline
  end
end

一切似乎都很好,但是当我在我的 Rails 控制台中时

irb(main):001:0> Task.new
ArgumentError: You need to supply at least one validation

问题出在哪里?

【问题讨论】:

    标签: ruby-on-rails validation ruby-on-rails-3.1


    【解决方案1】:

    您必须将validates 更改为validate

    【讨论】:

    【解决方案2】:

    你忘了告诉validates你想如何验证:deadline。我认为您误解了:if 的作用; :if =&gt; :deadline_in_future? 选项的意思是:

    仅当deadline_in_future? 方法返回真值时验证:deadline

    我怀疑您想验证截止日期是否在将来:

    validate :deadline_in_future?
    

    更多详情,请访问Active Record Validations and Callbacks Guide

    【讨论】:

      【解决方案3】:

      它说您没有将任何验证传递给validates 方法。比如validates :presence。你想验证什么?

      【讨论】:

      • 我正在尝试像这样guides.rubyonrails.org/…进行验证
      • 在该示例中,:presence =&gt; true 表示应验证 card_number 字段的存在,但仅当 paid_with_card? 方法返回 true 时才应执行验证。其背后的想法是,如果通过信用卡付款,订单应该有信用卡号,但如果不是用信用卡付款,则无需检查卡号是否正确存储。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多