I have a Logo model that has fields of name:string, default:boolean. I want the true value to be unique, so that only one item in the database can be set to true at once. How do
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!
Okay there is a few more things you will need.
Don't use the field name default, its usually reserved for the database. Saving a record with a default as false will set all records to false, this isnt what you want. check to see if we are setting this record to true and the falseify.
before_save :falsify_all_others
def falsify_all_others
if is_default
self.class.where('id != ?', self.id).where('is_default').update_all(:is_default => false)
end
end