私は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
これは機能していましたが、プロファイルがその特定のユーザーに関連付けられていることをアプリが認識していないように見えることが問題でした。プロファイルを作成できましたが、プロファイルとユーザーの間に関係があるようには見えませんでした。
マイ プロファイル モデル リスト: belongs_to :user
マイ ユーザー モデル リスト: has _one :profile
私の routes.rb ファイルには次のものがリストされています:
map.resources :users, :has_one => :profile
map.resources :profiles
プロファイル テーブルに 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
プロファイルをユーザーに接続するために、profiles_controller.rb ファイルを次のように更新しました。これは、基本的に Rails Getting Started Guide から推定したものです。私の考えでは、Rails Getting Started アプリでコメントが投稿に接続されるのと同じように、私のアプリではプロファイルがユーザーに接続されます。私のプロファイルコントローラーの関連部分は次のとおりです。それが助けになるなら、私はすべてを提供することができます:
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
終わり
プロファイル コントローラーにこれらの更新を行った後、アカウント作成画面で送信すると、次のようなエラー ページにリダイレクトされます。
ActiveRecord::RecordNotFound in ProfilesController#new
ID のないユーザーが見つかりませんでした
これはすべて非常に単純な Rails の使用例のように思えますが、どの部分が間違っているのかわかりません。よろしくお願いします。