Kojarzenie dwóch modeli w szynach (użytkownik i profil)

Jestem nowym użytkownikiem Rails. Buduję aplikację, która ma model użytkownika i model profilu.

Chcę powiązać te modele w taki sposób, że:
- Po utworzeniu konta użytkownik jest automatycznie wysyłany na stronę „Utwórz profil”, a utworzony przez niego profil jest podłączony tylko do tego konkretnego użytkownika.
- Tylko użytkownik, który jest właścicielem profilu, może go edytować.

Wygenerowałem model użytkownika za pomocą nifty_generators. Gdy trafienia użytkownika przesyłają do utworzenia konta, przekierowuję go do widoku „nowy profil”, aby utworzyć profil. Zrobiłem to, edytując ścieżkę przekierowania w kontrolerze użytkownika. Kontroler użytkownika wygląda tak:

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

To działało, ale problem polegał na tym, że aplikacja nie rozpoznała, że ​​profil jest połączony z tym konkretnym użytkownikiem. Udało mi się utworzyć profile, ale nie było związku między profilem a użytkownikiem.

Mój model profilu zawiera listę: belongs_to: user
Lista modeli użytkownika: ma _one: profil

Plik Moje trasy.rb zawiera następujące informacje:
map.resources: users,: has_one =>: profile
map.resources: profile

Mam klucz obcy user_id w tabeli profili. Mój schemat wygląda tak:

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

Aby spróbować połączyć profil z użytkownikiem, zaktualizowałem plik profiles_controller.rb o następujący, który w zasadzie ekstrapolowałem z podręcznika Rails Getting Started Guide. Myślę, że w mojej aplikacji profile łączą się z użytkownikami w taki sam sposób, jak w aplikacji Rails Getting Started, komentarze łączą się z postami. Oto odpowiednie części mojego kontrolera profili. Mogę przekazać całość, jeśli to pomoże:

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

koniec

Po wprowadzeniu tych aktualizacji do kontrolera profili, teraz po przesłaniu na ekranie tworzenia konta, jestem przekierowywany na stronę błędu, która mówi:

ActiveRecord :: RecordNotFound w ProfilesController # new
Nie można znaleźć użytkownika bez identyfikatora

To wszystko wydaje się być dość prostym przypadkiem użycia Railsów, ale nie jestem pewien, które elementy są błędne. Z góry dziękuje za twoją pomoc!

questionAnswers(3)

yourAnswerToTheQuestion