带日期的虚拟属性

时间:2010-10-13 14:49:11

标签: ruby-on-rails activerecord ruby-on-rails-3 virtual-attribute

我有一个表格,我想简化。我正在录制一个开始日期和结束日期,但是想要向用户显示一个开始日期,然后向下显示一个天数。

但我的模型出现问题并正确存储。

第一部分有效。

  def date=(thedate)
     #puts the startdate in the correct format...
     self.startdate = Date.strptime(thedate, '%m/%d/%Y')
  end

我遇到的问题与结束日期基于startdate + no_days这一事实有关,而no_days本身就是一个虚拟属性。我尝试将第二部分作为after_validation回调,但它似乎不起作用。

  def set_dates
    if self.startdate
      self.enddate = self.startdate + days
    end  
  end

1 个答案:

答案 0 :(得分:1)

首先,为什么需要在startdate中转换日期属性?为什么不在表单中使用f.date_select :startdate之类的内容?

然后,在您的模型中,您需要attr_accessor :number_of_days这样的内容,您可以使用f.select :number_of_days, (1..10).to_a将number_of_days作为整数添加到表单中(根据需要设置数组)。

您可以通过以下方式设置回调:

after_validation :set_enddate

def set_enddate
  if self.startdate
    self.enddate = self.startdate + self.number_of_days.days
  end
end