Несколько вещей:
Не используйте переменные экземпляра в вашей модели. Чтобы получить доступ к команде в пользовательской модели, просто наберите team
или self.team
.
Не используйте before_save
, поскольку вы не хотите создавать команду каждый раз, когда сохраняете своего пользователя.
Ваш метод create_team должен быть:
after_create :my_create_team
def my_create_team
create_team #create an empty team
end
Но если данные для новой команды уже присутствуют в форме, когда пользователь регистрируется, тогда группа должна быть автоматически создана, поскольку у вас есть accepts_nested_attributes_for :team
.
Я собираюсь ответить на некоторые ваши вопросы в комментариях здесь:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_one
Поэтому, когда вы добавляете has_one :team
, у вас теперь есть доступ ко всем этим методам (build_team, create_team, team = и т. Д.)
Под "пустым" я просто имел в виду, что если вы просто позвоните create_team
без каких-либо атрибутов, это создаст команду "по умолчанию": без имени и т. Д. Но это будет связано с вашим пользователем.
Если вы хотите просто создать «пустую» команду, вы можете просто сделать это, я думаю:
after_create :create_team
Создание собственного метода позволит вам просто передавать параметры по умолчанию.
Но вы, вероятно, добавили проверку в команду, например, проверку наличия ее имени.
В любом случае, поскольку у вас есть accepts_nested_attributes_for :team, :allow_destroy => true
, он должен автоматически создать команду, если у вас есть обязательные поля для команды пользователя в форме регистрации.