Используя сборку с has_one ассоциацией в направляющих

В этом примере я создаю a user без profile, затем позже создайте a profile для того пользователя. Я пытался использовать сборку с a has_one ассоциация, но это аварийно завершилось. Единственным путем я вижу, что эта работа использует has_many. user как предполагается, только имеет самое большее один profile.

Я пробовал это. Я имею:

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

Но когда я делаю:

user.build_profile 

Я получаю ошибку:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'profiles.user_id' in 'where clause': SELECT * FROM `profiles` WHERE (`profiles`.user_id = 4)  LIMIT 1

Существует ли путь в направляющих, чтобы иметь 0 или 1 ассоциацию?

135
задан omnikron 24 January 2015 в 13:14
поделиться

3 ответа

Сигнатура метода build отличается для ассоциаций has_one и has_many .

class User < ActiveRecord::Base
  has_one :profile
  has_many :messages
end

Синтаксис сборки для ассоциации has_many :

user.messages.build

Синтаксис сборки для ассоциации has_one :

user.build_profile  # this will work

user.profile.build  # this will throw error

Прочтите документацию по ассоциации has_one для более подробной информации.

351
ответ дан 23 November 2019 в 23:43
поделиться

Это должен быть has_one . Если build не работает, вы можете просто использовать new :

ModelName.new( :owner => @owner )

то же самое, что

@owner.model_names.build
-13
ответ дан 23 November 2019 в 23:43
поделиться

Внимательно посмотрите на сообщение об ошибке. Он сообщает вам, что у вас нет обязательного столбца user_id в таблице профиля . Установка отношений в модели - это только часть ответа.

Вам также необходимо создать миграцию, которая добавит столбец user_id в таблицу профиля. Rails ожидает, что это будет, и если это не так, вы не сможете получить доступ к профилю.

Для получения дополнительной информации перейдите по этой ссылке:

Основы ассоциации

18
ответ дан 23 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: