0

だから私は自分のルートを次のように設定しました:

StartPoint::Application.routes.draw do
  get 'login' => 'sessions#new', :as => 'login'
  get 'logout' => 'sessions#destroy', :as => 'logout'
  get 'signup' => 'users#new', :as => 'signup'

  resource :home, controller: 'home'
  resources :users
  resources :sessions

  root 'home#show'
end

bla.com/usersサインアップに行って適切なデータを入力できなかったときはいつでも、サインアップの代わりにいつも私を連れて行きます. 常にサインアップに戻る必要があります。私のコントローラーは、新規および作成の場合、次のようになります

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_signup_params)
    if @user.save
      redirect_to root_path
    else
      render :new
    end
  end
end

失敗した場合、新しいメソッドに戻る必要があるすべてのエラーメッセージを表示するために、すべてのエラーが表示されると誰かが私に言いました。新しいメソッドは、作成とはまったく異なる URL 構造を持っています。bla.com/signupいずれにせよ、エラーが発生した場合は、に戻る必要があります。bla.com/users

4

2 に答える 2

-1

あなたのフォームのアクションは/users. したがって、POST した後/users、別の URL ( ) にリダイレクトするか、エンドポイント/signupに満足する必要があります。/users注:redirect_to signup_path投稿したデータが失われる場合。

最善の選択肢は、サインアップにリソースを使用しないことです。

match 'signup' => 'users#signup'

次に、コントローラーで、POST と GET の両方を処理します。

def signup
  if request.post?
    @user = User.new(user_signup_params)
    if @user.save
      redirect_to root_path
    end
  end
  render :new
end

request オブジェクトのドキュメント。

于 2013-09-28T04:16:58.987 に答える