How to save german date text_field in database


#1

Hi Ruby Comunity!

To display a database stored date like %Y-%m-%d into a text_field with
german format %d.%m.Y. is not so difficult. For conversion you can do
something like

<%= f.text_field :date_test, :value =>
@tbl_datum.date_test.strftime(’%d.%m.%Y’)%>

or use a helper.

But how can I save it from the form back INTO the database.

I tried it like in Rubycast Nr. 32 “time in textfield” but I think it’s
not the same because you have to convert the date first from %d.%m.%Y to
database format%Y-%m-%d.

I tried many (3-days long), but nothings work.

Can somebody help me please, I’m really desperate:-(

Thanks ahead for every proposal!

Regs,

Herman


#2

Hallo Hermann,
Try to convert the text field param to a Date Object using the various
parsing options provided with the Date class. Then save this to the
database.
Greetings, mike

2009/5/26, Herman Müller removed_email_address@domain.invalid:

or use a helper.

Thanks ahead for every proposal!

Regs,

Herman

Posted via http://www.ruby-forum.com/.


Von meinen Mobilgerät aus gesendet


#3

Hi Mike,

thanks for your rapid answer.

Can you give me an example how to do this?

Thanks in front!

Regs

Herman

mike wrote:

Hallo Hermann,
Try to convert the text field param to a Date Object using the various
parsing options provided with the Date class. Then save this to the
database.
Greetings, mike


#4

Herman Müller wrote:

Hi Ruby Comunity!

To display a database stored date like %Y-%m-%d into a text_field with
german format %d.%m.Y. is not so difficult. For conversion you can do
something like

<%= f.text_field :date_test, :value =>
@tbl_datum.date_test.strftime(’%d.%m.%Y’)%>

or use a helper.

But how can I save it from the form back INTO the database.

I tried it like in Rubycast Nr. 32 “time in textfield” but I think it’s
not the same because you have to convert the date first from %d.%m.%Y to
database format%Y-%m-%d.

I tried many (3-days long), but nothings work.

Can somebody help me please, I’m really desperate:-(

Thanks ahead for every proposal!

Regs,

Herman

This is how I do it. Unless until I digg into i18n

Put into application.rb

def update_date(*args)
rec = args.shift
args.each do |e|
d,m,y,time = params[rec][e].split(/.| /)
params[rec][e] = y + ‘-’ + m + ‘-’ + d + ’ ’ + time unless y.nil?
end
end

Then call:
update_date(:doc, :time_created, :time_closed)

before you update attributes in your controller.

by
TheR


#5

Herman Müller wrote:

Hi Damjan,
Hi Mike,

I made a helper according to the Railscast Nr. 32 “time in textfield”
and played on Mikes advice a little bit with the Date Object and hurray
it works.

def date_test_string
date_test.strftime(’%d.%m.%Y’)
end

def date_test_string=(date_test_str)
self.date_test = Date.strptime(date_test_str, ‘%d.%m.%Y’)
rescue ArgumentError
@date_test_invalid = true

end

def validate
errors.add(:date_test, “is invalid”) if @date_test_invalid
end

@Damjan:

The example you wrote, what you mean with:

update_date(:doc, :time_created, :time_closed)etc.

are that the date-attributes inside the model

like <%= f.text_field :date_test %> ?

Regs

Herman

Yes. I prefere:
<%= text_field :doc, :date_test %>
or in my case I use calendar_date_select
<%= calendar_date_select :doc, :time_closed, :time => true, :size => 15
%>

update_date method will update params[:doc][:time_created] and
params[:doc][:time_closed] fields.

You call it before updating fields in a model with values obtained from
browser.

def save
@doc = Doc.find(params[:id])
update_date(:doc, :time_created, :time_closed)
if @doc.update_attributes(params[:doc])


end

by
TheR


#6

Hi Damjan,
Hi Mike,

I made a helper according to the Railscast Nr. 32 “time in textfield”
and played on Mikes advice a little bit with the Date Object and hurray
it works.

def date_test_string
date_test.strftime(’%d.%m.%Y’)
end

def date_test_string=(date_test_str)
self.date_test = Date.strptime(date_test_str, ‘%d.%m.%Y’)
rescue ArgumentError
@date_test_invalid = true

end

def validate
errors.add(:date_test, “is invalid”) if @date_test_invalid
end

@Damjan:

The example you wrote, what you mean with:

update_date(:doc, :time_created, :time_closed)etc.

are that the date-attributes inside the model

like <%= f.text_field :date_test %> ?

Regs

Herman