Keep the schema.rb under version control.
Use Rake db:scheme:load instead of rake db:migrate to initialize the empty database.
Use rake db:test:prepare to update the schema of the test database.
Avoid setting default data in the table. Use the model layer to replace.
def amount
Self[:amount] or 0
end
However, the use of self[:attr_name] is considered quite common, and you may also consider replacing it with a more verbose (arguably more readable) Read_attribute:
def amount
Read_attribute (: Amount) or 0
end
When writing a constructive migration (join a table or field), migrate using the new method of Rails 3.1-replace the up and down method with the change method.
# The way it used to be
class Addnametoperson < activerecord::migration
def up
add_column:p ersons,: Name,: String
End
def down
remove_column:p erson,: Name
end
# New Preferences
class Addnametoperson < Activerecord::migration
def change
add_column:p ersons,: Name,: string
end