0

コントローラーから適切にルートという名前のレールをレンダリングするにはどうすればよいですか?

ルート.rb:

get "logout" => "sessions#destroy", :as => "logout"
get "login" => "sessions#new", :as => "login"
get "signup" => "users#new", :as => "signup"

root :to => "home#index"

resources :users
resources :sessions
resources :likes

user_controller.rb:

def new
  @user = User.new
end

def create
  @user = User.new params[:user]
  if @user.save
    login(params[:user][:email], params[:user][:password])
    redirect_to root_url, :notice => "Welcome! You have signed up successfully."
  else
    render :new
  end
end

問題は次のとおりです。サインアップページがオン/signupになっていて、データが@user正しく入力されておらずrender :new、呼び出されたときに、URL/signupに移動する代わりに に移動し/usersます。私は使用redirect_toしますが、提供されなかったデータをユーザーに伝えるためにエラーをページに保存したいので、使用しないことを好みます。

追加後に更新match "signup" => "users#create", :via => "post"

root             /                            {:controller=>"home", :action=>"index"}
users     GET    /users(.:format)             {:action=>"index", :controller=>"users"}
          POST   /users(.:format)             {:action=>"create", :controller=>"users"}
edit_user GET    /users/:id/edit(.:format)    {:action=>"edit", :controller=>"users"}
user      GET    /users/:id(.:format)         {:action=>"show", :controller=>"users"}
          PUT    /users/:id(.:format)         {:action=>"update", :controller=>"users"}
          DELETE /users/:id(.:format)         {:action=>"destroy", :controller=>"users"}
signup    GET    /signup(.:format)            {:action=>"new", :controller=>"users"}
          POST   /signup(.:format)            {:action=>"create", :controller=>"users"}

ありがとう

4

2 に答える 2

1

このルートも追加します。

match "signup" => "users#create", :via => "post"
于 2011-10-10T04:34:14.590 に答える
1

routes.rbに追加できます

get "signup", to: "users#new"
post "signup", to: "users#create"
put "signup", to: "users#update"

そして登録フォームで-signup_pathを 確認してください

form_for(resource, as: resource_name, url: signup_path, html: {method: 'post'})

devise_for :usersを使用したその他の読者は、ルートを次のように定義できます。

devise_scope :user do
  get "signup", to: "devise/registrations#new"
  post "signup", to: "devise/registrations#create"
  put "signup", to: "devise/registrations#update"
end

そして、上記の登録フォーム

このルートを追加することで、ユーザーが登録フォームにエラーを入力した後でも、(register, signup) のような名前付きルートを使用できます。

于 2015-06-09T21:11:55.293 に答える