【问题标题】:Rails Model Validation on :symbol for a dateRails 模型验证:日期符号
【发布时间】:2010-01-28 13:34:05
【问题描述】:

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

我的验证是这样的:

:mydate - 1.day

但我明白了:

undefined method `-' for :mydate:Symbol"

完全是一个新手问题,但我无法弄清楚大声笑 - 我如何对符号执行日期数学?

编辑:

好的,所以我也无法从控制器或表单对象访问参数。我正在使用基本的 restful 控制器:

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,我会得到:

未定义的方法`checkin'

如果我尝试这样做

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

我明白了

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

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

【问题讨论】:

  • 如果你能提供更多的周边代码,它可能会为完整的答案提供足够的上下文。

标签: ruby-on-rails


【解决方案1】:

您不能对符号执行日期数学运算,因为符号只是一个更复杂的字符串。除了名称之外,它没有其他值。但假设您有一个模型,其属性名为 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 方法,因此您希望在该上下文中调用属性。

【讨论】:

  • 好的 - 更新了更多代码 - 我仍然无法访问模型中的参数:/
  • 啊,谢谢 :) 真正了解 Rails 如何将所有螺栓连接在一起的新手让我失望了。当您来自 DIY PHP 世界时,Rails 类的工作方式并不总是显而易见的——好吧,无论如何,对于像我这样的笨蛋来说 :) 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2011-09-16
  • 2019-04-21
  • 1970-01-01
  • 2011-08-05
  • 2012-04-14
相关资源
最近更新 更多