Как в RoR реализовать валидацию, что модель Parrent имеет как минимум один Children, а валидации модели Children требуют Parrent?
Есть модели Parrent1 и Parrent2 c has_many :children, у которых должен быть как минимум один Children. И есть модель Children с belongs_to :parrentable, polymorphic: true. При этом для валидации Children требуются некоторые поля родительской модели. Как это можно реализовать в RoR?
Я могу создать все это в одной транзакции: Сначала сохраняется родительская модель(у нее нет валидации на Children), потом создаются Children(они имеют доступ к родителю, т.к. он уже сохранен), дальше проверяется, что родитель имеет как минимум одного ребенка. Если проверка не прошла, то вызывается RollBack и ничего не сохраняется. Все работает, но хотелось бы узнать есть ли для этого в RoR встроенный функционал. accepts_nested_attributes_for не работает, т.к. при создании Children, родитель еще не создан, а inverse_of не работает с polymorphic
Это не подходит, нужно именно, чтобы родитель имел как минимум одного ребенка. Например, есть модель Project. В зависимости от типа проекта у него могут быть разные поля. Они хранятся в модели Property. При создании проекта нужно, чтобы эти свойства были заполнены, и в зависимости от типа проекта, они разные. Поэтому при создании проекта нужно, чтобы были обязательно созданы несколько Propety. При это при валидации Property нудны данные проекта.
Я хотел использовать для этого nested_attributes, но тогда при создании Project, в Propety он будет не доступен, т.к. сохраняется после, и поэтому валидации в Propety не пройдут.
Да, верно. С этим все просто. Но мне же еще и нужно, чтобы ребенок проводил валидацию на основе атрибутов родителя. При том методе, в ребенке не доступен родитель. В любом случае, похоже для этого нет railsway решения. Мое решение, которое я написал в вопросе, работает, но мне оно показалось костыльным, но ничего лучше я так не нашел.