Ruby on rails 铁路线路误读

Ruby on rails 铁路线路误读,ruby-on-rails,routes,ruby-on-rails-4,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:

因此,我设置了如下路线:

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

表单的操作是/users。因此,在发布到/users之后,您需要重定向到不同的url/注册,或者只对/users端点感到满意。注意:如果您将_重定向到signup_路径,您将丢失发布的数据

您最好的选择可能是不使用资源进行注册

匹配“注册”=>“用户注册”

然后在控制器中,处理两个POST并获取:

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

你不应该有帖子吗

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

嗯,你从来没有定义过方法post?它不像它,它不明白它是什么,事实上:命名法或我的错误,我是指请求。发布?出于某种原因,我认为它可以直接在控制器中使用。在Rails中,由于控制器基于RESTful体系结构,因此新建和创建需要两种不同的路由。您希望使用相同的路线同时执行这两项操作。也许这个问题可能有用:抛出一个错误,指出它没有用于此类型设置的模板。只是为了确保我的意思是“另外”。get'login将您带到登录表单,post'login'是表单发布的内容。