0

在偶然发现 Michael Hartl 教程后,我无法弄清楚为什么会发生这种情况。

当我单击提交表单并期望失败时,呈现后的预期 url 应该是 '/signup' 但由于某些原因它是 '/users'

这是我的控制器

  def new
    @user = User.new
  end

  def show
    @user = User.find(params[:id])
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to @user
    else
      render 'new'
  end

这是我的路线

resources :users
match '/signup', to: 'users#new'

首先,当我点击注册链接时,网址是

http://localhost:3000/signup

然后提交失败这个网址是

http://localhost:3000/users

谁能解释我为什么会这样?谢谢

4

2 回答 2

2

当您发布到 UsersController(从您的注册操作创建一个新用户)时,您正在调用该#create操作。如果您在该页面上查看源代码,您会看到表单操作是/users,表单方法是POST。因此,当您提交表单时,提出的请求是:

POST /users
(some data)

如果保存失败,那么您在那里的创建操作只会呈现“新”模板。你不会被重定向到任何地方。render :action => "new"只是渲染new动作的模板——它实际上并不重定向到新动作,或者运行它的动作代码。

于 2012-12-17T13:05:03.997 回答
0

根据rails 中的routes.rb 使用情况,match您的routes.rb 文件中的标记确定controller/action匹配时要到达的位置。

user所以在这里,您的注册网址与控制器->操作匹配new。但如果new操作失败,则 url不是 /signup而是user控制器的new函数。所以 url 就是这样显示的。希望我说得更清楚一些。

于 2012-12-17T13:00:42.643 回答