铁路误区路线

时间:2013-09-28 03:36:19

标签: ruby-on-rails routes ruby-on-rails-4

所以我设置了我的路线:

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而不是注册。它应该总是回去注册。我的控制器看起来像这样,对于new和create

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

2 个答案:

答案 0 :(得分:0)

你不应该有帖子

post 'login' => 'sessions#create', :as => 'login'
get 'login' => 'sessions#new', :as => 'login'
get 'logout' => 'sessions#destroy', :as => 'logout'
get 'signup' => 'users#new', :as => 'signup'

答案 1 :(得分:-1)

表单的操作是/users。因此,在POST到/users后,您需要重定向到其他网址(/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 object的文档。