= 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| %>
<%= f.date_checkbox :terms_accepted_at %>
<% 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 (c) 2011 Matthias Viehweger, released under the MIT license