关于 ruby?? on rails: 带日期的虚拟属性

virtual attribute with dates

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

但我的模型和正确存储它时遇到问题。

第一部分有效。

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

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

1
2
3
4
5
  def set_dates
    if self.startdate
      self.enddate = self.startdate + days
    end  
  end

首先,为什么你需要在你的开始日期中转换一个日期属性?为什么不在表单中使用类似 f.date_select :startdate 的东西?

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

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

1
2
3
4
5
6
7
after_validation :set_enddate

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