Rails渲染路径路径

时间:2011-09-23 18:03:47

标签: routes ruby-on-rails-3.1

我还是Rails的新手,并且很难理解路径系统在Rails中的工作原理。

在我的routes.rb中,我为注册创建了一个别名:

match 'signup' => 'user#new'
resource :user, :controller => 'user'

操作就在那里,并且/ signup显示正确的操作。到目前为止一切都很好。

现在,当我提交我的注册表单时,它会像往常一样使用POST运行创建操作。这就是我陷入困境的地方。

如果注册失败,我想再次向用户显示注册表单。一种选择是做一个渲染“新”,但这会将用户带到/ user而不是/ signup。

UserController中

class UserController < ApplicationController

  def new
    @user = User.new
  end


  def create

    @user = User.new(params[:user])

    if @user.save
      redirect_to root_url
    else
      render "new"
    end

  end

end

任何帮助表示赞赏!

更新 - 解决方案

使用:via选项

为/ signup添加了2个匹配路由
match 'signup' => 'user#new', :as => :signup, :via => 'get'
match 'signup' => 'user#create', :as => :signup, :via => 'post'

这样,应用程序知道发布到/ signup时应该运行create动作,当http方法获取时,它会使用新动作。

控制器标记与上面发布的相同。

1 个答案:

答案 0 :(得分:0)

尝试将“:as”添加到您的路线中,如下所示:

match 'signup' => 'user#new', :as => :signup

然后再做

redirect_to signup_url

在您的控制器中。

这对我有用。我还是不知道为什么。也许其他人有解释。