Risposte:
Puoi utilizzare validates_presence_of
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of
class A < ActiveRecord::Base
has_many :bs
validates_presence_of :bs
end
o semplicemente validates
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates
class A < ActiveRecord::Base
has_many :bs
validates :bs, :presence => true
end
Ma c'è un bug se lo userai accepts_nested_attributes_for
con :allow_destroy => true
: Modelli annidati e convalida genitore . In questo argomento puoi trovare la soluzione.
-------- Rotaie 4 ------------
Semplice ha validates
presence
funzionato per me
class Profile < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_one :profile
end
In questo modo, Profile.create
ora fallirà. Devo utilizzare user.create_profile
o associare un utente prima di salvare un file profile
.
Puoi convalidare le associazioni con validates_existence_of
(che è un plugin):
Snippet di esempio da questo post di blog :
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :taggable, :polymorphic => true
validates_existence_of :tag, :taggable
belongs_to :user
validates_existence_of :user, :allow_nil => true
end
In alternativa, puoi usare validates_associated
. Come faisal osserva nei commenti sotto la risposta, validates_associated
controlla se l'oggetto associato è valido eseguendo le convalide di classe associate. Essa non verificare la presenza. È anche importante notare che un'associazione nulla è considerata valida.
Se vuoi assicurarti che l'associazione sia presente e garantita per essere valida, devi anche usare
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
validates
come mi piacevalid: true
invece di dover chiamarevalidates_associated
separatamente.