I am currently using Rails 2.0.2 with Ruby 1.8.7. My Prototoype.js version is 1.7(if required). I am basically trying to integrate the calendar_date_select plugin in my app.
The link/tutorial I am referring is: http://ianli.com/site/HowTo/UseCalendarDateSelectRailsPlugin
I am trying to save the date I receive through the date select plugin and store in a rails symbol :publishing_date.
I am selecting the date using the calendar_date_select plugin. The selected date gets uploaded into the text field, but I am not sure how to transfer that returned value onto my publishing_date attribute(:publishing_date symbol) of my books table.
On manually entering a date I am able to see it reflected in the DB. I am getting stuck when I am trying to save it through the plugin.
<%= f.text_field :publishing_date %>
On clicking on the create button I get a null value for the date selected via the calendar_date_select plugin. I am able to properly insert values for name of book and author.
My code for a new book looks like this:
<%= javascript_include_tag :defaults %>
<script src='/javascripts/calendar_date_select/calendar_date_select.js' type='text/javascript'></script>
<h1>New book</h1>
<%= error_messages_for :book %>
<% form_for(@book) do |f| %>
<p>
<b>Title</b><br />
<%= f.text_field :title %>
</p>
<p>
<b>Author</b><br />
<%= f.text_field :author %>
</p>
<p>
<b>Publishing Date</b><br />
<%=calendar_date_select_tag f.text_field :publishing_date %> <!--This way of save/assigning doesn't work -->
</p>
<br />
<br />
<br />
<br />
<p>
<%= f.submit "Create" %>
</p>
<% end %>
<%= link_to 'Back', books_path %>
Also once I save it perfectly, could you also please tell me how would I be able to display this date it in my index.html.erb
My current index.html.erb looks like this:
<h1>Listing books</h1>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Publishing Date</th>
</tr>
<% for book in @books %>
<tr>
<td><%=h book.title %></td>
<td><%=h book.author %></td>
<td><%= book.publishing_date %></td> <!-- Will this work? -->
<td><%= link_to 'Show', book %></td>
<td><%= link_to 'Edit', edit_book_path(book) %></td>
<td><%= link_to 'Destroy', book, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<%= will_paginate @books %>
<br />
<%= link_to 'New book', new_book_path %>
An interesting excerpt from the aforementioned tutorial link is given below:
The value of the selected date can be accessed by getting the value of the text field named calendar.
Using the Prototype Javascript Library, you can do the following to get the value.
$F('calendar')
The roadblock I am facing is how to call the $F('publishing_date') in my new.html.erb file using the rails <%=> tag and then assign that to my :publishing_date symbol which will eventually be use to update the publishing_date attribute in my books table.
Thanks for your support.
As far as "How to display", you are correct that
will work just fine, IF it gets set. You say you can set it just fine with a text field, right (i.e. your migrations are correct)? Doing that, then looking at your index page should confirm this.
Also, from my experience, javascript vars can't be passed to rails (though rails vars can be passed to javascript). So, you would never be able to get $F('publishing_date') into your erb file. By the time any javascript vars are set, it's not a Ruby program anymore, it's just a web page... There MUST be a default way for your plugin to handle things, and I'm a little surprised it's not working out of the box... Hrrm...wait...
I just actually glanced over the tutorial you linked to, and I THINK I see your problem:
Your plugin is not ACTUALLY a form helper (that works with "form_for).
If it WAS a form helper (and would set your form variable like you want), you'd call it with:
<% f.calendar_select_tag %>
Which would make it be a parameter passed into your form. In this case, it seems like it's just generating a calendar for you, which you can then program your own javascript to handle (like "function changeLocation(date)" in the tutorial). It has nothing at ALL to do with forms.
If you want this interface to actually work with a form, you'll have to make the form in html/javascript and NOT with the ruby helper tags. (which is more complicated).
You'd need to have a post, which contains "$F('publishing_date')" in the parameters, as well as any other javascript variables you'd want to set, and hit your create route manually, through javascript, with those post variables.... Not exactly fun.
Edit:
It's possible it MIGHT work with something like:
or whatever (a different way to do tags, as opposed to the "form_for" you were using)
http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html
Either way, at the very least, the way you were calling it:
is completely wrong, since you include "f.text_field" in there, which might be a typo? How can it be a select tag AND a text field? Who knows, maybe just getting rid of that will help (though it's still not associated with a form unless you do <% form_tag%>