2016-11-25 5 views
0

Скажем, у меня есть эта простая связь:Сохранить в то же время, ошибка handeling

class Post < ActiveRecord::Base 
    has_many :comments # :autosave option is not declared 
end 

И этот код:

post = Post.new(title: 'ruby rocks') 
post.comments.build(body: 'hello world') 
post.save # => saves both post and comment 

Что произойдет, если post является недействительным, оно по-прежнему создавать свой комментарий?

Что произойдет, если прикрепленный код comment недействителен, не создает ли он сообщение?

Я бы хотел, чтобы это произошло, когда comment или post недействительны, это ничего не спасает. Правильно ли я поступаю?

мне нужно validates_associated ли? Спасибо

ответ

0

Если пост является недействительным, это не будет сохранять связанные записи. Согласно документам на Active Record Autosave Association:

Сохранение родителя, его ассоциаций и уничтожение отмеченных ассоциаций, все происходит внутри транзакции. Это никогда не должно оставлять базу данных в несогласованном состоянии.

Вам также необходимо проверить validate_associated, если также должны быть проверены дочерние записи. Однако будьте осторожны, чтобы вызвать только validates_associated с одной стороны ассоциации, иначе вы создадите круговую ссылку.

+0

Средства, которые я должен использовать 'validates_associated' –

+0

Да, поставьте validates_associated в своей модели Post, но не в вашей модели комментариев. – mysmallidea

Смежные вопросы