How can I avoid AR confusing way of handling default values for
attributes w/ :null => false?
This issue came up before, but I could not find an answer that resolves
the issue, which I outline below:
First, I add a test table using migrations:
class AddTestTable < ActiveRecord::Migration
def self.up
create_table “users”, :force => true do |t|
t.column “email”, :string, :null => false
t.column “age”, :integer, :null => false
end
end
def self.down
drop_table “users”
end
end
$ script/generate model User
$ script/console
Loading development environment.
User.new.email
=> “”User.new.age
=> 0
I just dont understand why it defaults email to “” and age to 0 and not
to nil. Nowhere did
I set the default email value to “” and the default age value to 0 in
my migration.
Now if I do $rake db:schema:dump here’s what the generated schema looks
like:
ActiveRecord::Schema.define(:version => 1) do
create_table “users”, :force => true do |t|
t.column “email”, :string, :default => “”, :null => false
t.column “age”, :integer, :default => 0, :null => false
end
end
All of a sudden there is a :default=>"" for email and a default 0 for
age
The new user would validate fine even if I set validates_presence_of
:email, :age in the model file. It even gets worst if one sets a
foreign key to :null => false, as it would default to 0!
Is there a way of overriding this confusing way that AR has to handle
default values???
Thanx,
Edoardo “Dado” Marcora