2014-11-17 4 views
0

У меня есть 3 модели: учетная запись, player_team и команда. Команда игрока служит для объединения учетных записей и команд. Таблица Player_team имеет атрибуты account_id и team_id. Когда я создаю команду, у меня должна быть хотя бы учетная запись, которая создала ее, принадлежащую команде. Что я делаю неправильно? Любая помощь будет оценена, спасибо.Создание нового объекта при создании другого

 def create 
     @team = Team.new(team_params) 
     @team.save 
     @team_player = current_account.player_teams.build(:account_id => current_account.id, :team_id => @team.id) 
     @team_player.save 
     respond_with(@team) 
     end 

class Account < ActiveRecord::Base 
    has_many :player_teams 
    has_many :teams, through: :player_teams 

class Team < ActiveRecord::Base 
    has_many :player_teams 
    has_many :accounts, through: :player_teams 
end 

class PlayerTeam < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :team 
end 
+1

Какую ошибку вы получаете? Разве это не создает «PlayerTeam»? –

+0

Вы пытались поставить «новый» вместо «построить»? –

+0

Я попробую @HristoGeorgiev – MMrj

ответ

1

Поскольку вы создаете объект прямо в контроллер (вместо того, чтобы просто объявить его и открытия формы в окне ввода параметров), вы должны использовать

new 

ключевое слово.

Решение вашей проблемы будет

@team_player = current_account.player_teams.new(:account_id => current_account.id, :team_id => @team.id) 
1

Это должно работать:

def create 
    @team = Team.new(team_params) 
    @team.save 
    @team_player = current_account.build_player_team(:account_id => current_account.id, :team_id => @team.id) 
    @team_player.save 
    respond_with(@team) 
end 

Построить по себе не спасет, и сохранение родителя ничего не будет делать. Вам нужно использовать build_player_team или использовать create() вместо build. Либо это сработает.

def create 
    @team = Team.new(team_params) 
    @team.save 
    @team_player = current_account.player_teams.create(:account_id => current_account.id, :team_id => @team.id) 
    @team_player.save 
    respond_with(@team) 
end 
1

Обратите внимание, что нет необходимости проходить через все эти проблемы вручную. Вы могли бы просто сказал:

respond_with(@team = current_account.teams.create(team_params)) 
Смежные вопросы