0

Michael Hartlのチュートリアルに出くわした後、なぜこれが発生するのか理解できませんでした。

送信フォームをクリックして失敗すると予想される場合、レンダリング後に予想されるURLは「/ signup」である必要がありますが、いくつかの理由で「/users」です。

これは私のコントローラーです

  def new
    @user = User.new
  end

  def show
    @user = User.find(params[:id])
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to @user
    else
      render 'new'
  end

これが私のルートです

resources :users
match '/signup', to: 'users#new'

まず、サインアップリンクをクリックすると、URLは次のようになります。

http://localhost:3000/signup

次に、submissonはこのURLが失敗します

http://localhost:3000/users

なぜそれが起こるのか誰かが私に説明できますか?ありがとう

4

2 に答える 2

2

UsersControllerに投稿するとき(サインアップアクションから新しいユーザーを作成するため)、#createアクションを呼び出します。/usersそのページでソースを表示すると、フォームアクションがであり、フォームメソッドがであることがわかりますPOST。したがって、フォームを送信すると、要求は次のようになります。

POST /users
(some data)

保存が失敗した場合、そこでの作成アクションは「新しい」テンプレートをレンダリングするだけです。どこにもリダイレクトされません。render :action => "new"アクションのテンプレートをレンダリングするだけです。new実際には新しいアクションにリダイレクトしたり、アクションコードを実行したりすることはありません。

于 2012-12-17T13:05:03.997 に答える
0

railsでのroutes.rbの使用法に従ってmatch、routes.rbファイルのタグcontroller/actionは、一致する場合に到達するものを決定します。

したがって、ここでは、サインアップURLはuserコントローラー->newアクションに一致しています。ただし、newアクションが失敗した場合、URLは/ signupではなく、userコントローラーのnew関数になります。したがって、URLはそのように表示されます。私がそれをいくらか明確にしたことを望みます。

于 2012-12-17T13:00:42.643 に答える