Rails: как запустить проверку родительского объекта при сохранении дочернего объекта? - PullRequest
0 голосов
/ 27 мая 2020

У меня две модели: Post и User. код показан ниже

class User
 has_one :post
 validates_associated :post
 validates_presence_of :name
end

class Post
 belongs_to :user
 validates_presence_of :description
 #validates_associated :user
end

user = User.new
user.build_post # creating post without description
user.save 
user.valid? => false  #This is working as expected

post = Post.new
post.build_user
post.save
post.valid? => true  

Я ожидал post.valid? чтобы вернуть false, потому что я предоставил пустой 'name'. Похоже, что проверка, определенная для модели пользователя, не выполняется, когда я сохраняю объект сообщения. Я не могу использовать validates_associated :user в почтовой модели, потому что это приведет к ошибке «круговой зависимости». у меня вопрос: если validates_associated :user нельзя использовать в почтовой модели, то какая альтернатива?

1 Ответ

0 голосов
/ 27 мая 2020

Согласно https://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_associated:

validates_associated не работает с ассоциациями has_one

Рекомендуется использовать validates на ассоциация has_one как таковая:

class User
 has_one :post, validates: true
end

Обратите внимание, что я не тестировал это и просто основываю свою рекомендацию на этом источнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...