У меня есть 2 родственных модели, и мне нужно их проверить и создать.Проверка и сохранение связанных моделей вместе
Применение
class Application < ActiveRecord::Base
has_many :application_sessions, inverse_of: :application
ApplicationsSession
class ApplicationSession < ActiveRecord::Base
belongs_to :application, inverse_of: :application_sessions
Если бы это было возможно, я бы лик e, чтобы создать
Application
черезApplicationSession
, ноapplication_session.build_application
не будет работать, потому что он никогда не будет действительной записью.application_session.create_application
не работает, потому что даже еслиApplicationSession
не является допустимой записью, он создастApplication
.
Для первого; он проверяет Application
и ApplicationSession
. Эта логика может работать нормально, если я только пропустил проверку application_id
для ApplicationSession
, если Application
является действительной записью. Тем не менее, я предпочитаю использовать более элегантное решение, если оно есть.
Для второго; Я могу удалить Application
, если ApplicationSession
не является допустимой записью, но мне это не совсем понравилось.
Что лучше всего подходит для создания/не создания зависимых записей вместе с Rails?
Разъяснение:
Просто, я хочу родителей и ребенка, который будет создаваться вместе, пока не существует, существует родитель и действительный ребенок собирается сохранить (действительно ожидать, что она не имеет никаких родитель). Если дочерний элемент не является допустимой записью, ничего не должно быть создано.
Существование родителя является обязательным. Дело в том; родитель должен существовать только в том случае, если первый созданный ребенок действителен. Поэтому мне нужно проверить дочерние элементы до создания родителя; если это возможно. Но вы не можете этого сделать, потому что ребенок всегда будет недопустимой, если только нет родителя. –
В этом случае ... используйте транзакцию :) Откажитесь от нее, если ребенок недействителен. – Ghoti
Сделки работали, но, вероятно, это не лучшее решение для подобных проблем. Кроме того, контроллеры стали сложными. Я реализую первое решение, и тесты говорят, что они делают все отлично, а коды более читабельны. Тем не менее, я был бы счастливее, если бы было более простое и не-хакерское решение. –