2010-01-28 79 views
1

我试图从我的表单中比较几个日期。Rails模型验证:日期符号

林我确认我有类似:

:mydate - 1.day 

,但我得到:

undefined method `-' for :mydate:Symbol" 

完全是一个福利局问题,但我不能算出它大声笑 - 我该如何执行日期算术一个符号?

编辑:

行,所以我不能从控制器访问PARAMS任一,或形式的对象。我使用的基本宁静控制器:

def create 

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

etc... 
end 

,然后在我的模型我想验证某些日期 - 最终的结果应该是签入日期应该是一样的结帐日期减去夜

数量

所以我的模型:

class Booking < ActiveRecord::Base 

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

或者我愿意做这样的事情,但不能。

如果我尝试访问@ booking.checkin我得到:

未定义的方法`签

如果我尝试做

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

我得到

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

我在这里错过了什么。东西可能很明显大声笑:)

+0

如果您可以提供更多的周围代码,它可能会给出足够的上下文以获得完整的答案。 – 2010-01-28 05:29:23

回答

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方法被称为预订对象了,所以你要调用在这方面的属性。

+0

好的 - 用更多的代码更新 - 我仍然无法访问模型中的参数:/ – firecall 2010-01-28 05:29:41

+0

我相应地更新了我的答案 – 2010-01-28 05:35:53

+0

啊,谢谢:) 我的新事实际上知道如何导致所有螺栓一起让我失望。当你来自DIY PHP世界时,Rails类的工作方式并不总是显而易见的 - 好吧,就像我这样的傻子:) 谢谢。 – firecall 2010-01-28 05:39:51