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!) On Tuesday October 21, 2008 2:58:40 pm Tony Tony wrote: > Hi all, > > As usual, you've all been very helpful in the past and I thank you for > continuing to help myself and others. > > Today I have the following code/database architecture question which I > would like you guys to help me out with. > > > Children Table (user has_many children) > -------------- > ... > is_lost boolean, default => false > is_found boolean, default => false > ... > > > Basically, a child is "safe" if he is not flagged as lost or found (so a > child has 3 possible states: safe, lost, found). > > I created a custom validation to avoid a child from being both lost AND > found with this: > > [code] > def validate > if is_lost? and is_found? > errors.add_to_base("A child can't be lost <i>AND</i> found at the > same time!") > end > end > [/code] > > This all works great and validates correctly. HOWEVER, the only way I've > been able to select if a child is lost or found is through check boxes > (not the best way to do this). I think a drop down box would be the > better solution to select if a child is either lost or found (or safe) > > > My question is this: > > Is this the best way to achieve what I am trying to do? Is it better to > just have a column in my table named "status" where the values would be > either Safe, Lost, Found and remove the is_lost and is_found boolean > columns instead? > > If the current way I designed it is good, how can I create a drop down > box that could handle both the is_lost and is_found data? > > > I know this is a disaster (in my eyes) but I would like the opinions and > suggestions of you experienced folks. > > > Thank you!!! > -Tony > > > P.S. Let me know if you need more info or code to help you understand > this. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---