Rails - «Невозможно записать неизвестный атрибут» для односторонней ссылки - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть простое приложение с двумя моделями Product и Subject.Product ссылается на один Subject и имеет поле subject_id в своей таблице базы данных.

Впоследствии Product.rb содержит:

has_one :subject

Subject, однако делаетне ссылается на Product, так как в этом нет необходимости.

Когда я пытаюсь создать новый Product, у меня возникают проблемы с назначением Subject для Product.Я получаю сообщение об ошибке:

can't write unknown attribute `product_id`

в отмеченной строке ProductsController#create ниже (где product_params - список параметров формы, а params[:product][:subject_id] - предоставленный пользователем идентификатор темы):

@product = Product.new(product_params)
@subject = Subject.find(params[:product][:subject_id])
--> @product.subject = @subject

Я полагаю, что это жалоба, потому что в таблице subjects нет поля product_id, но оно должно быть необходимо, поскольку Subject не ссылается на Product.

* 1033.* Возможно ли создать одностороннюю ссылку, подобную этой, или необходимо всегда иметь ссылку «один к одному» или «один ко многим»?

1 Ответ

0 голосов
/ 03 февраля 2019

Модель, имеющая столбец «other_model_id», должна объявлять отношение «own_to», а не отношение «has_one».Измените свой код на belongs_to :subject

Проверьте направляющие рельсов https://guides.rubyonrails.org/association_basics.html#choosing-between-belongs-to-and-has-one

РЕДАКТИРОВАТЬ: FYIO, вам не нужны эти строки @subject = Subject.find(params[:product][:subject_id] и @product.subject = @subject, новые уже обрабатывают, чтоесли вы разрешите параметр: subject_id в product_params

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...