Rails and Model Validation
-
19-09-2019 - |
Question
I want to put some model level validation on the following table:
create_table :audios do |t|
t.integer :library_id, :null => false
t.string :file, :null => false, :limit => 2048
t.string :name, :limit => 512
t.timestamps
end
Does this mean, that my model, which (so far) looks like:
class Audio < ActiveRecord::Base
belongs_to :library
end
Has
class Audio < ActiveRecord::Base
validates_presence_of :library
...
or
class Audio < ActiveRecord::Base
validates_presence_of :library_id
...
?
Solution
To validate the presence of an association, use its name, without _id
appended:
validates_presence_of :library
It will validate two things:
library_id
is present- a
Library
with the givenid
exists
Using validates_presence_of :library_id
will only give you the first validation of the two.
In addition to this, the version without _id
will also correctly validate if both records are new (and therefore library_id
is still unset).
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow