我还是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方法获取时,它会使用新动作。
控制器标记与上面发布的相同。
答案 0 :(得分:0)
尝试将“:as
”添加到您的路线中,如下所示:
match 'signup' => 'user#new', :as => :signup
然后再做
redirect_to signup_url
在您的控制器中。
这对我有用。我还是不知道为什么。也许其他人有解释。