Rails模型验证:日期的符号

时间:2010-01-28 05:00:22

标签: ruby-on-rails

我正在尝试比较我的表单中的几个日期。

我的验证我有类似的东西:

:mydate - 1.day

但我明白了:

undefined method `-' for :mydate:Symbol"

完全是一个新问题,但我无法弄清楚LOL - 如何在符号上执行日期数学?

编辑:

好的,所以我无法从控制器或表单对象访问params。我正在使用基本的安静控制器:

def create

 @booking = Booking.new(params[:booking])

 etc...
end

然后在我的模型中我想验证一些日期 - 最终结果应该是Checkin日期应该与Checkout日期减去夜晚相同

所以我的模特:

class Booking < ActiveRecord::Base

  def validate   
    errors.add_to_base "Nights Borked" if :checkin != (:checkout - :nights.day)
  end
end

或者我想做那样的事,但不能。

如果我尝试访问@ booking.checkin,我会:

未定义的方法`checkin'

如果我尝试

@foo = params[:booking][:checkin]

我得到了

undefined local variable or method `params' for #<Class:0x103fd1408>

我在这里缺少什么。显而易见的事情可能大声笑:))

1 个答案:

答案 0 :(得分:3)

您无法对符号执行日期数学运算,因为符号只是一个更复杂的字符串。它没有其名称以外的值。但假设您的模型具有名为mydate的属性:

@object.mydate - 1.day

或者如果您从表单传入参数:

params[:mydate] - 1.day

根据您更新的代码示例,您希望将属性称为self.attribute,如下所示:

class Booking < ActiveRecord::Base

  def validate   
    errors.add_to_base "Nights Borked" if self.checkin != (self.checkout - self.nights.day)
  end
end

已在预订对象上调用validate方法,因此您希望在该上下文中调用属性。