Связывание двух моделей в 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, но яЯ не уверен, какие части не так. Заранее спасибо за помощь!

Ответы на вопрос(3)

Ваш ответ на вопрос