DateCheckbox
This is a rails-plugin which can create a checkbox for attributes which are datetime-fields in the database. So, if you want to store the date when a user appected some terms or received some goods, but want to circumvent the need of selecting the proper date and time from 6 dropdowns, you can just use this plugin.
It creates some wrapper-methods on the model for the attributes you specify and provides a form-helper which uses these. The model-methods also work with standard checkbox-tags.
Personally, I do not want to go through the hassle of selecting the proper date and time from 6 dropdowns. I just want to check a checkbox and have my app to the rest. In many cases, this is even required security- or permission-wise.
While this functionality is fairly easy to implement for one datetime-field (like terms_accepted_at), I don’t like to repeat this code.
Therefore, I put this rails-plugin together.
A neat side-effect is, that I went and created a form-helper and added some useful model methods along the way.
Installation
Just add
gem 'date_checkbox'
to your Gemfile. If your not using Bundler and Rails3 by now, we can still be friends, but thats about it.
Example
# app/models/user.rb
class User < ActiveRecord::Base
has_date_checkbox :terms_accepted_at
end
This adds the following three methods to the user-model:
-
terms_accepted # returns “0” or “1”
-
terms_accepted= # “1” sets to the current Time, otherwise sets to nil
-
terms_accepted? # true or false
You can use it the form-helper like this:
# app/views/users/_form.html.erb
<%= form_for @user do |f| %>
<p><%= f.date_checkbox :terms_accepted_at %></p>
<% end -%>
The date_checkbox appends the date form the database if its selected. If you do not want that, simply use
f.checkbox :terms_accepted
This is what f.date_checkbox uses anyway.
Notes
Currently, I hook into ActionPack/ActionView directly, which is dirty by saves you from declaring a different FormBuilder for every form. I also refrained from changing the default-form builder for you because I don’t want to conflict with other form-extensions you might want to use.
If everything goes south, you can still use the model-methods. This is not (by any means) über-rocket-science. It’s just convenient.
Your turn.
Development
Cpt. Obvious told me the following:
This is open-sourced on github.
You can contribute by sending pull-requests or just opening issues.
He is obviously right and you also knew that. Any feedback is appreciated.
Copyright © 2011 Matthias Viehweger, released under the MIT license