Прежде всего, вот как делать то, что вы хотите:
@user = current_user
@shop = Shop.create(params[:shop])
@user.shop = @shop
Теперь вот почему ваша версия не работает:
Возможно, вы подумали, что это может сработать, потому что если у пользователя есть отношение has_many
к магазину, @user.shops.create(params[:shop])
будет работать . Однако между has_many
отношениями и has_one
отношениями существует большая разница:
При наличии отношения has_many
shops
возвращает объект коллекции ActiveRecord, в котором есть методы, которые можно использовать для добавления и удаления магазинов для пользователя. Одним из таких методов является create
, который создает новый магазин и добавляет его пользователю.
С отношением has_one
вы не получаете такой объект коллекции, а просто объект Shop, принадлежащий пользователю - или ноль, если у пользователя еще нет магазина. Поскольку ни у объектов Shop, ни у nil нет метода create
, вы не можете использовать create
таким образом с отношениями has_one
.