问题
I was playing around with Rails admin and I noticed something.
Attributes which are defined as below in model, counted as "Required" in Rails admin
validates :user, presence: true
However, attributes which are defined as below in table (schema/migration) still counted as "Optional"
t.datetime "created_at",:null => false
I would have assumed that both of these are identical except perhaps the level from which the validation error pops up. Am I wrong or is this a Rails admin error? Are both of these ensuring that this field will be required for a successful field save or is there a difference?
回答1:
Adding a :null => false
means that this is a database restriction, i.e. under no circumstance will the database allow a null value.
Adding a presence: true
is a model level validation so will take place before the object is inserted into the database. There may be a case you want to break these validations (for example edge cases or in your specs) You can then skip validation using :validates => false
and the object will still go into the database, with a null DB restriction, this won't happen.
回答2:
t.datetime "created_at",:null => false
is telling the database not to accept null values.
Whereas, validates :user, presence: true
is like telling the Rails app to not accept null values.
But it would be good to have them integrated, like having :null => false to also have it registered with Rails to have a model validation.
来源:https://stackoverflow.com/questions/19972913/validates-presense-vs-null-false-in-rails-models-tables