Связывание двух моделей в Rails (пользователь и профиль)
м, новичок в Rails. Я'Я создаю приложение, которое имеет модель пользователя и модель профиля.
Я хочу связать эти модели так, чтобы:
- После того, как пользователь создает аккаунт, он автоматически отправляется в «создать профиль" страница, и профиль, который он создает, связан только с этим конкретным пользователем.
- Только пользователь, который владеет профилем, может редактировать его.
Я сгенерировал пользовательскую модель, используя nifty_generators. Когда пользователь нажимает «Отправить» для создания учетной записи, я перенаправляю его в «новый профиль" посмотреть, чтобы создать профиль. Я сделал это, отредактировав путь перенаправления в пользовательском контроллере. Пользовательский контроллер выглядит так:
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
flash[:notice] = "Thank you for signing up! You are now logged in."
redirect_to new_profile_path
else
render :action => 'new'
end
end
Это работало, но проблема была в том, что приложение неКажется, он не знает, что профиль был связан с этим конкретным пользователем. Я был в состоянии создавать профили, но там неКажется, это отношения между профилем и пользователем.
Список моделей в моем профиле
Мои списки моделей пользователей: имеет _one: профиль
В моем файле rout.rb перечислено следующее:
map.resources: users,: has_one => :профиль
map.resources: профили
У меня есть внешний ключ user_id в таблице профилей. Моя схема выглядит так:
create_table "profiles", :force => true do |t|
t.integer "user_id"
t.string "name"
t.string "address1"
t.string "address2"
t.string "city"
t.string "state"
t.string "zip"
t.string "phone"
t.string "email"
t.string "website"
t.text "description"
t.string "category"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", :force => true do |t|
t.string "username"
t.string "email"
t.string "password_hash"
t.string "password_salt"
t.datetime "created_at"
t.datetime "updated_at"
end
Чтобы попытаться подключить профиль к пользователю, я обновил файл profile_controller.rb следующим образом, который я в основном экстраполировал из Руководства по началу работы с Rails. Я думаю, что в моем приложении профили соединяются с пользователями так же, как в приложении Rails Getting Started комментарии соединяются с постами. Вот'S соответствующие части моего профиля контроллера. Я могу предоставить все это, если это поможет:
def new
@user = User.find(params[:user_id])
@profile = @user.profile.build
end
def create
@user = User.find(params[:user_id])
@profile = @user.profile.build(params[:profile])
if @profile.save
flash[:notice] = 'Profile was successfully created.'
redirect_to(@profile)
else
flash[:notice] = 'Error. Something went wrong.'
render :action => "new"
end
конец
После внесения этих обновлений в контроллер профилей, теперь, когда я отправляю на экран создания учетной записи, яm перенаправлен на страницу с сообщением об ошибке:
ActiveRecord :: RecordNotFound в ProfilesController # new
не мог»Найти пользователя без идентификатора
Все это выглядит довольно простым вариантом использования Rails, но яЯ не уверен, какие части не так. Заранее спасибо за помощь!