【问题标题】:Misunderstanding routes in rails误解铁路中的路线
【发布时间】:2013-09-28 03:36:19
【问题描述】:

所以我这样设置路线:

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 结构与 create 方法完全不同。无论如何,如果有错误 - 我需要它回到bla.com/signup,而不是bla.com/users

【问题讨论】:

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


【解决方案1】:

你不应该有一个帖子

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

【讨论】:

  • 抛出一个错误,指出它没有用于此类设置的模板。
  • 只是为了确保我的意思是另外。 get 'login 将您带到登录表单,post 'login' 是表单发布的内容。
【解决方案2】:

表单的操作是/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 object 的文档。

【讨论】:

  • 嗯,你从来没有定义过方法post?它不喜欢它,它不明白它是什么,其实:NoMethodError
  • 我的错误,我的意思是request.post? 出于某种原因,我认为它可以直接在控制器中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多