2017-02-08 8 views
1

2ページのサインアップフォームを作成して、UsersControllerを使って電子メールとパスワードを入力してから、個人情報(名前、年齢)をDetailsControllerで取得します。 2つのテーブルは1対1の関係でリンクされています。2つのビュー/コントローラ間で変数を渡す

user_idフィールドをUsersControllerからDetailsControllerに渡すにはどうすればいいですか?

User.firstがこの例ではハードコードされています。しかし、新しいuser_id@detail.user変数に渡したいと思います。

# config/routes.rb 
resources :users do 
    resources :details 
end 

は次に、新しい詳細ページのためのルートは次のようになります: /users/:user_id/details/newこれを実装する多くの方法の

def create 
    @detail = Detail.new(detail_params) 
    @detail.user = User.first 
    if @detail.save 
    flash[:notice] = "Your Details has been successfully saved" 
    redirect_to detail_path(@detail) 
    else 
    render 'new' 
    end 
end 

答えて

0

一つは、UserDetailとしてネストされたリソースを作ることです。それはあなたがUsersControllercreateアクションから2ページの処理にユーザーをリダイレクトすることができます:

# app/controllers/users_controller.rb 
def create 
# ... 
if @user.save 
    redirect_to new_details_path(user_id: @user.id) 
else 
    render 'new' 
end 

ごDetailsControllerでは、あなたがのparamsからuser_idを得ることができます:

# app/controllers/details_controller.rb 
def create 
    @user = User.find(params[:user_id]) 
    @detail = @user.detail.build(detail_params) 
    # ... 
0

使用セッション。彼らは無料です。例=> session[:foo] = 'bar'

このように次のページのsession[:foo]にアクセスできます。セッションをクリアしたい場合は、それをnilに設定するだけです。

関連する問題