First and foremost, shouldn't your model be called Child? A single child
shouldn't be called "a children", but that's how you have it set up. Having
it as is won't destroy the universe, but it will end up getting really
confusing sooner or later. Rails knows that "children" is the plural form
of "child". Open the rails console and type "child".pluralize to see for
yourself.
That aside, since Children is a stateful object, you should consider the Acts
As State Machine plugin. All you need is the plugin and a "state" (varchar)
column in the model's database table. This gives you all kinds of neat
functionality.
In your rails app root, do this little number:
script/plugin install
http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/
We will configure your model to have three states: "safe", "lost",
and "found". In your Children model, add the following:
#set the default state
acts_as_state_machine, :initial => :safe
# declare three states: "safe", "lost", and "found"
state :safe
state :lost
state :found
# configure state methods
event :lost do
transitions :from => :safe, :to => :lost
transitions :from => :found, :to => :lost
end
event :found do
transitions :from => :safe, :to => :found
transitions :from => :lost, :to => :found
end
event :safe do
transitions :from => :lost, :to => :safe
transitions :from => :found, :to => :safe
end
That's it. Now the following methods will work to check the state:
@child.safe? # true/false
@child.lost? # true/false
@child.found? # true/false
The "events" that you declared are used to change the object's state, using
event!. For example, to change a safe child to lost, you would call:
@child.lost!
Normally, you would want to name your "events" some kind of verb. This makes
the method easier to read and understand, but your situation is peculiar. I
guess you should leave them as is to avoid any further confusion.
You can tell AASM to call additional methods when transitioning between
states, if you wish. You can also block transitions unless certain conditions
are met. Read up on the callbacks and guard functions here:
http://rails.aizatto.com/2007/05/24/ruby-on-rails-finite-state-machine-plugin-acts_as_state_machine/
(site is currently showing a blank page, but it's there, I swear!)