开发者

virtual attribute with dates

开发者 https://www.devze.com 2023-01-20 11:22 出处:网络
I have a form which i\'d like to simplify.I\'m re开发者_如何学Gocording a startdate and an enddate, but would like to show the user only a startdate and then a drop down with number of days.

I have a form which i'd like to simplify. I'm re开发者_如何学Gocording a startdate and an enddate, but would like to show the user only a startdate and then a drop down with number of days.

But I'm having problems with my model and storing it correctly.

The first part works.

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

The problem I have has to do with the fact that the end date is based on the startdate + the no_days which is itself a virtual attribute. I tried doing the second part as a after_validation callback but it doesn't seem to work.

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


First of all, why do you need to convert a date attribute in your startdate? Why don't you use something like f.date_select :startdate in you form?

Then, in your model you need something like attr_accessor :number_of_days with wich you can get the number_of_days as an integer in your form with f.select :number_of_days, (1..10).to_a (set the array as you like).

You can set your callback the following way:

after_validation :set_enddate

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

精彩评论

暂无评论...
验证码 换一张
取 消