2014-01-15 3 views
0

У меня есть модель User и Team. У пользователя может быть только одна команда, и каждая команда принадлежит пользователю. Я изо всех сил пытаюсь заставить ассоциацию работать в обоих направлениях.создание записи с has_one и принадлежит_to

модель команды:

class Team < ActiveRecord::Base 
    belongs_to :user 
end 

модель Пользователь:

class User < ActiveRecord::Base 
    has_one :team 
end 

Я добавил колонку team_id в таблице пользователей и user_id в таблице команд.

Я хочу, чтобы создать команду для пользователя, чтобы в консоли я сделал следующее

@user = User.find_by(id: 4) 
@team = @user.build_team 

который создал команду с правильным user_id но team_id для пользователя по-прежнему равна нулю. Что я делаю не так?

ответ

0

Я собирался удалить этот вопрос, как это, вероятно, довольно глупо, но в случае, если кто-либо другой получает, как запутался, меня нашел ответ здесь: http://ruby-on-rails.wonderhowto.com/how-to/use-one-one-association-when-using-ruby-rails-3-407824/

Что теперь я понимаю, что у вас есть отношения HAS_ONE и внешний ключ появляется в таблице Модели, которую он «владеет». То есть команда пользователя has_one, поэтому таблице команд требуется user_id. Таблице пользователей не требуется команда team_id.

Вы можете создать новую команду с помощью

@team = @user.build_team 

Как я сделал или:

@user.team = (name: "blah", rating: "blah blah") 

, а затем, если вы хотите, чтобы заставить пользователя команд затем

@user.team 

будет вернуть этот объект.