# From 3 fields :date input from forms to 1 field

**URL:** <https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550>\
**Category:** Rails\
**Created:** [October 20, 2009, 3:40am UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550 "2009-10-20T03:40:56Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 3:40am UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/1 "2009-10-20T03:40:56Z")

</div>

Hi Rails community, here is my newbie problem (I’m migrating from PHP to  
ruby due to framework and ruby syntax, but I’m having some problems with  
“freedom” that a single php page offers):

I’m using the scaffolding technique (yea, I love it) to create a  
webpage, but if I specify that a field type is :date, Rails auto  
generate a form where the field of type :date is created through 3  
fields: day, month and year.

I would like to use only one field (always) (will be something that I’ll  
use for all :date field-type), a text field, where the date will be  
written in dd/mm/YY format, how can I do this without writing something  
in javascript that “set some hidden fields” (month and year) when you  
write in the text field?

Are there a “general” way (as I’ve said, I’ll use this always instead of  
normal way of setting dates)?

Thanks

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 9:45am UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/2 "2009-10-20T09:45:24Z")

</div>

On Tue, Oct 20, 2009 at 3:40 AM, Francesco B.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I would like to use only one field (always) (will be something that I’ll  
> use for all :date field-type), a text field, where the date will be  
> written in dd/mm/YY format, how can I do this without writing something  
> in javascript that “set some hidden fields” (month and year) when you  
> write in the text field?  
> How would you do that on PHP?

> Are there a “general” way (as I’ve said, I’ll use this always instead of  
> normal way of setting dates)?

Scaffold will generate the form, but you can modify it as you please.  
Change the form and make sure the parameters are OK in the controller  
(yes, with tests)

Hope it helps.

–  
Leonardo M…  
There’s no place like ~

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 1:17pm UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/3 "2009-10-20T13:17:58Z")

</div>

Leonardo M. wrote:

> On Tue, Oct 20, 2009 at 3:40 AM, Francesco B.  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > I would like to use only one field (always) (will be something that I’ll  
> > use for all :date field-type), a text field, where the date will be  
> > written in dd/mm/YY format, how can I do this without writing something  
> > in javascript that “set some hidden fields” (month and year) when you  
> > write in the text field?  
> > How would you do that on PHP?
> 
> > Are there a “general” way (as I’ve said, I’ll use this always instead of  
> > normal way of setting dates)?
> 
> Scaffold will generate the form, but you can modify it as you please.  
> Change the form and make sure the parameters are OK in the controller  
> (yes, with tests)
> 
> Hope it helps.
> 
> –  
> Leonardo M…  
> There’s no place like ~  
> In PHP I don’t have a predefined framework and so I don’t have rules to  
> follow (but this is not a good thing: I’m changing from PHP to Ruby also  
> for this reason), I have to write my own form and rewrite the way I use  
> it for storing informations

BTW, I’m quite sure that I’m not explaining very well but I’ve found  
something:  
In ActionView::Helpers::DateHelper there is “date\_select” method, which  
creates html tags formatted in a way, so the day selection tag will have  
“name” attribute “calendar[mydate(3i)]”, the month will have  
“calendar[mydate(2i)]” and so on. If I change these tags in my single  
text field tag I will have “calendar[mydate]” and nothing else, but when  
I send this information obviusly ruby should understand how to “split”  
this date to store it: where should I do this (and where could I read my  
submitted vars?)? In controller I only have  
Calendar.new(params[:calendar]) in create method, so I think that params  
should be “changed” in some way, is this the good way?

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 2:09pm UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/4 "2009-10-20T14:09:24Z")

</div>

On Tue, Oct 20, 2009 at 8:17 AM, Francesco B.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > –  
> > creates html tags formatted in a way, so the day selection tag will have  
> > “name” attribute “calendar[mydate(3i)]”, the month will have  
> > “calendar[mydate(2i)]” and so on. If I change these tags in my single  
> > text field tag I will have “calendar[mydate]” and nothing else, but when  
> > I send this information obviusly ruby should understand how to “split”  
> > this date to store it: where should I do this (and where could I read my  
> > submitted vars?)? In controller I only have  
> > Calendar.new(params[:calendar]) in create method, so I think that params  
> > should be “changed” in some way, is this the good way?

Yes, I don’t think there’s any other way to do that. You should parse  
your params[:calendar][:mydateXX] and format them in the way you need.  
I would do something like:  
day = params[:calendar] .delete(“mydate(3i)”)  
month = params[:calendar] .delete(“mydate(3i)”)  
year = params[:calendar] .delete(“mydate(3i)”)  
#I don’t really remember the order they are stored, but you get the idea  
Then, do somehting like:  
params[:calendar][:name\_of\_the\_date\_field\_here] = Date.new(year, month,  
day)  
And then:  
Calendar.new(params[:calendar]

But that’s just my first approach to this, maybe you can figure out a  
better way to do it.

Hope it helps.

–  
Leonardo M…  
There’s no place like ~

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 10:27pm UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/5 "2009-10-20T22:27:46Z")

</div>

Leonardo M. wrote:

> On Tue, Oct 20, 2009 at 8:17 AM, Francesco B.  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > > –  
> > > creates html tags formatted in a way, so the day selection tag will have  
> > > “name” attribute “calendar[mydate(3i)]”, the month will have  
> > > “calendar[mydate(2i)]” and so on. If I change these tags in my single  
> > > text field tag I will have “calendar[mydate]” and nothing else, but when  
> > > I send this information obviusly ruby should understand how to “split”  
> > > this date to store it: where should I do this (and where could I read my  
> > > submitted vars?)? In controller I only have  
> > > Calendar.new(params[:calendar]) in create method, so I think that params  
> > > should be “changed” in some way, is this the good way?
> 
> Yes, I don’t think there’s any other way to do that. You should parse  
> your params[:calendar][:mydateXX] and format them in the way you need.  
> I would do something like:  
> day = params[:calendar] .delete(“mydate(3i)”)  
> month = params[:calendar] .delete(“mydate(3i)”)  
> year = params[:calendar] .delete(“mydate(3i)”)  
> #I don’t really remember the order they are stored, but you get the idea  
> Then, do somehting like:  
> params[:calendar][:name\_of\_the\_date\_field\_here] = Date.new(year, month,  
> day)  
> And then:  
> Calendar.new(params[:calendar]
> 
> But that’s just my first approach to this, maybe you can figure out a  
> better way to do it.
> 
> Hope it helps.
> 
> –  
> Leonardo M…  
> There’s no place like ~

Thanks your suggestion actually is working for me (and better: I’ve  
understood it)

theambler wrote:

> I found this helpful:
> 
> [#73 Complex Forms Part 1 - RailsCasts](http://railscasts.com/episodes/73-complex-forms-part-1)
> 
> and the two episodes that follow.

These seems even better, but actually I have some difficults in  
understanding it (I’m at the very beginning, so I’m having troubles in  
understanding some processes)

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 5:12pm UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/6 "2009-10-20T17:12:42Z")

</div>

I found this helpful:

> **[\#73 Complex Forms Part 1 - RailsCasts](http://railscasts.com/episodes/73-complex-forms-part-1)**
>
> Short Ruby on Rails screencasts containing tips, tricks and tutorials. Great for both novice and experienced web developers.

and the two episodes that follow.

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 10:37pm UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/7 "2009-10-20T22:37:39Z")

</div>

2009/10/20 Francesco B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > > I send this information obviusly ruby should understand how to “split”  
> > > year = params[:calendar] .delete(“mydate(3i)”)  
> > > Hope it helps.  
> > > I found this helpful:
> > 
> > [#73 Complex Forms Part 1 - RailsCasts](http://railscasts.com/episodes/73-complex-forms-part-1)
> > 
> > and the two episodes that follow.
> 
> These seems even better, but actually I have some difficults in  
> understanding it (I’m at the very beginning, so I’m having troubles in  
> understanding some processes)

Just to check that you have also seen the rails guides at

> **[Ruby on Rails Guides](https://guides.rubyonrails.org/)**
>
> Ruby on Rails Guides

The Getting Started, ActiveRecord Associations, Debugging, and Testing  
guides are compulsory reading (and re-reading and experimenting till  
it makes sense).

Colin

Colin

---

<div class="post-metadata">

**Author:** ![fire-dragon-dol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/43a26b/32.png) [@fire-dragon-dol](https://www.ruby-forum.com/u/fire-dragon-dol)\
**Post date:** [October 20, 2009, 10:57pm UTC](https://www.ruby-forum.com/t/from-3-fields-date-input-from-forms-to-1-field/177550/8 "2009-10-20T22:57:05Z")

</div>

Colin L. wrote:

> Just to check that you have also seen the rails guides at  
> [http://guides.rubyonrails.org/](http://guides.rubyonrails.org/)  
> The Getting Started, ActiveRecord Associations, Debugging, and Testing  
> guides are compulsory reading (and re-reading and experimenting till  
> it makes sense).
> 
> Colin
> 
> Colin

Thanks, I’ll read them as fast as possible
