Какое-то запутанное объяснение получается. Лучше приведите пример кода.
Из того, что я понял, вы хотите при создании обыъекта одной модели создавать объект другой, который с первой никак напрмяую не связан. Это архитекрутно не слишком удобно и не слишком тривиально. Лучше бы попробовать как-то преобразовать архитекрутуру.
Что бы использовать один и тот же метод при создании и обнволении можно делать так:
group = Group.find_or_initialize_by(params)
Что бы создавать объект модели сразу со связанными моделями, полезно использовать nested attributes.
В вашем случае это будет что-то вроде:
class Trainig < ActiveRecord::Base
has_many :exercises
accepts_nested_attributes_for :exercises
end
...
training = Training.create(training_params.merge(exercises_atrributes: array_with_hashes_of_exercises_atrributes))
Причем в массив параметров для упражнений можно внести данные для создания групп и создавать группу при ее отсутсвии перед созданием упраженения при помощи find_or_initialize_by.
PS. Как правильно сказали в комментариях, для того что бы предевать nested attributes из общей формы удобно использовать fields_for.