2012-02-15 12 views
2

私は次のチュートリアルに問題があります。検証に合格しなかった場合、Railsはアクションを再描画します。Railsはオブジェクトでレンダリングする代わりにリダイレクトしますか?

: - - ボタンを

http://localhost:3000/Usersを打つ前に、無効な詳細

でボタンを押した後これがコードです

http://localhost:3000/signup:すべてがうまく動作しますが、明らかにURLが同じに見えていないこと

@user = User.new(params[:user]) 
if @user.save 
flash[:success] = "Welcome to the Sample Application!" 
redirect_to @user 
else 
    render 'new' 
end 

@userオブジェクトにredirect_toを渡して、正しいURLを表示するようにしてください。は、form_forを使用して、 @userによって入力されましたか?

答えて

0

よくレンダリングを呼び出すだけで、基本的にはその部分を使用するように指示します。したがって、レンダリングされたビューが異なっていても、URLは指定されたアクション(この場合は/ Users)と一致します。

は、ここであなたががredirect_toを使用することができます方法は次のとおりです。

redirect_to new_user_path(@user) 

あなたはまた、のようなパラメータを使用して明示的に指定できますredirect_toは、HTTPを使用してサーバーの応答をすることができますから、

redirect_to some_path({:data => 1, :var => 2}) 
+0

唯一の問題は、ユーザーオブジェクトをその新しい場所に渡すことができないことです。フォームを作成してエラーを読むために、そのユーザーオブジェクトを使用する必要があります – andy

0

少なくともではない、本当にありません、応答をリダイレクトすると、クライアントは指定されたURLを取得します。つまり、対応するRailsアクションが新しいコンテキストで呼び出され、ユーザーオブジェクトのようなローカル変数にアクセスすることが不可能になります。 あなたが行うことができるのは、とにかくデータベースにユーザーを保存して(おそらく特別な一時テーブル内に)、idをパラメータを取得するか、またはクッキーに保存して呼び出されたアクションで取得して値を設定するだけです新しいユーザーオブジェクトに追加します。 私には両方のオプションが正しいURLを持っているだけの努力に値するとは思われません。

関連する問題