How do form data get into ActiveRecord object?

Hi

I'm quite new to rails and I think until now I didn't get all of
ActiveRecord :slight_smile:

So, here is what I want to do:

I have a form where a user can input a date. The logic behind the date
field should be a bit fancy and allow a special input short cuts:

- "" (blank field) => Date.today
- "25" => 25th of currnet month
- "23.3" => March, 23th in current year..

and so on (I guess you got the clue)

I think I could use client side javascript to do the job, but IMHO
this is not a good way to do this.

Where can I hook this in in Rails?

For me this belongs into the modle class.

In my controller I have the following line:
    @project_time = ProjectTime.new(params[:project_time])

The "date" is one of the params. So which method do I need to
implement/override to get the chance to
look at the date passed from the form ?

Thanks for your help

Alex

Hi Alex,
Alex wrote:

I have a form where a user can input a date. The logic
behind the date field should be a bit fancy and allow a
special input short cuts:

- "" (blank field) => Date.today
- "25" => 25th of currnet month
- "23.3" => March, 23th in current year..

Where can I hook this in in Rails?

For me this belongs into the modle class.

The "date" is one of the params. So which method do I need to
implement/override to get the chance to
look at the date passed from the form ?

You might want to define a method in your model to implement the logic and use a before_save filter to call it.

hth,
Bill

Alex,

You could fiddle with the param in the controller. Here is a mock-up:

now = Time.now
param_date = params[:project_time][:date]
params[:project_time][:date] = case
when /^\d$/ then Time.mktime(now.year, now.month, param_date)
...
else param_date
end

Hi

Thanks for your help.

I found another solution, which I think is the way to go, as the date
is corrected just as it is added to the model.
So the model always holds correct data.

I overwrite the date= method in my model

class ProjectTime < ActiveRecord::Base

...

def date=(value)
  # check value and do the filtering
  value = ....

  # set attribute im my model class
  self[:date] = value
end

end

Alex