Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nested models, forms and date_select FormHelper integration

I have followed Ryan Bates tutorial on nested models. Several of my nested models have dates associated with them. In my migrations, they are actually the type "Date."

Some things I have tried and problems I've run into

  1. date_select - can handle the form object prefix, but not nested models attributes
  2. select_year - doesn't work with form object
  3. a regular select populated with the year by using (Time.now.year - 100)..(Time.now.year) and overriding the attr accessor start_date and end_date to take the value in the select to form a date and passing that back. works on create only, not on update
  4. changing the data type of the field to string and using a regular select populated with the year by using using (Time.now.year - 100)..(Time.now.year) works, but on edit, it won't repopulate the select with the current information

Any ideas or hints would be helpful.

Edit: before_save seems to be more promising but for some reason, the value is nil coming into before save but is visible in the log dump.

Edit 2: Interestingly, this only seems to be a problem on 'update', not on 'create'.

like image 447
davidstites Avatar asked Jan 26 '10 17:01

davidstites


2 Answers

I'd seriously hope that this works for date_select as well:

http://jeffperrin.com/2009/06/04/rails-nested-forms-and-collection_select/

like image 33
Jeff Perrin Avatar answered Nov 10 '22 18:11

Jeff Perrin


This is the solution:

<% new_or_existing = task.new_record? ? 'new' : 'existing' %>
  <% prefix = "project[#{new_or_existing}_task_attributes][]" %>

<% fields_for prefix, task do |t| -%>
   <%= t.date_select(:start_date, :index => task.id || nil) %>
<% end -%>

Here's the explanation of why it works:

http://agilerails.wordpress.com/2009/03/11/date_select-time_select-doesnt-work-with-auto_prefix-object/

like image 167
MikeH Avatar answered Nov 10 '22 17:11

MikeH