Here’s one that might get you Rails developers:
class Comment < ActiveRecord::Base def before_create self.spam = false end end
comments (id, spam)
The above model was in an app that allowed site administrators the ability to
Comment as spam. Naturally, this mapped to a
boolean column in the
Comment was ever being saved.
In Rails, if any
ActiveRecord callback returns
false the model will NOT be saved.
The solution is to put the
spam column’s default value of
false for all
Comment‘s in the
Comment model’s migration:
class CreateComments < ActiveRecord::Migration def self.up create_table :comments do |t| t.column :spam, :boolean, :default => false end end def self.down drop_table :comments end end
This is one instance were a domain 'constraint’, if you can call it that, has to go in the database and not in the model.
I love stuff like this.