【问题标题】:virtual attribute with dates带日期的虚拟属性
【发布时间】:2010-10-13 14:49:10
【问题描述】:

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

但是我的模型和正确存储有问题。

第一部分有效。

  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

【问题讨论】:

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


    【解决方案1】:

    首先,为什么你需要在你的开始日期中转换一个日期属性?为什么不在表单中使用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
    

    【讨论】:

    • 非常感谢。我正在使用第一个 date 虚拟属性,因为我不喜欢 date_select 帮助器,并且正在使用带有 jq-ui datepicker 的文本字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多