Rails 3 app model how ensure only one boolean field set to true at a time

This code is stolen from previous answer and slightly simplified:

def falsify_all_others
  Item.where('id != ?', self.id).update_all("default = 'false'")
end

You can use this method in before_save callback in your model.

Actually, it is better to "falsify" only records which values are 'true', like this:

Item.where('id != ? and default', self.id).update_all("default = 'false'")

UPDATE: to keep code DRY, use self.class instead of Item:

self.class.where('id != ? and default', self.id).update_all("default = 'false'")

I think it's good to check if the one you save is true before you falsify others. Otherwise you falsify everyone when you save a record that isn't active.

def falsify_all_others
    if self.default
        self.class.where('id != ? and default', self.id).update_all("default = 'false'")
    end
end

In your controller code you could do something like this.... please note you're probably taking Item2 as a param[...] so you can interchange that below

@items_to_be_falsified = Item.where('id != ?', Item2.id)

@items_to_be_falsified.each do |item|
  item.default = false
  item.save
end

Please note when you get this working, its good practice to move this into the model, make it into a function and call it like Item2.falsify_all_others like below

def falsify_all_others
  Item.where('id != ?', self.id).each do |item|
    item.default = false
    item.save
  end
end

Enjoy!