Відповіді:
Ви можете використовувати 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
або просто validates
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates
class A < ActiveRecord::Base
has_many :bs
validates :bs, :presence => true
end
Але з цим є помилка, якщо ви будете використовувати accepts_nested_attributes_for
з :allow_destroy => true
: Вкладені моделі та перевірку батьків . У цій темі ви можете знайти рішення.
-------- Рейки 4 ------------
Простий validates
presence
працював для мене
class Profile < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_one :profile
end
Таким чином, Profile.create
тепер не вдасться. Я повинен використовувати user.create_profile
або пов’язати користувача перед збереженням a profile
.
Ви можете перевірити асоціації за допомогою validates_existence_of
(який є плагіном):
Приклад фрагмента з цієї записи в блозі :
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
Як варіант, ви можете використовувати validates_associated
. Як зазначає Файсал у коментарях під відповіддю, validates_associated
перевіряє, чи пов'язаний об'єкт дійсний, запустивши відповідні перевірки класу. Це не перевіряє на наявність. Також важливо зауважити, що нульова асоціація вважається дійсною.
Якщо ви хочете переконатися, що асоціація є присутнім і гарантовано дієвим, вам також потрібно скористатися
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
validates
подобається,valid: true
замість того, щоб телефонуватиvalidates_associated
окремо.