在Rails 3中保留表单验证的自定义路由

时间:2011-08-06 09:17:40

标签: ruby-on-rails ruby-on-rails-3 routing

我是Rails的新手,我正在构建一个示例应用程序,因此我可以了解它和RESTful范例。

我有一个用户注册页面,路由到/ signup而不是/ users / new。如果表单上的验证失败,则会呈现“新用户”页面,但会将URL更改为创建用户路径/ users。

我很难解决如何以适合Rails 3的方式解决这个问题(The solutions I've found似乎基于Rails 2的路由系统)以及尽可能考虑RESTful我已经覆盖/ users / new成为别的东西。

毕竟,这应该是一次学习练习;我不太关心如何让它理解我应该做什么。

这是routes.rb:

match '/signup', :to => 'users#create', :via => :post #first attempt at solving this
resources :users
match '/signup',  :to => 'users#new'
#... routes to other controllers

这是我的控制器,处理:创建动作:

def create
@user = User.new(params[:user])
if @user.save
  flash[:success] = "Welcome to Blather, the hottest new social network until about two weeks from now or TechCrunch gets bored!"
  redirect_to @user
else
  @title = "Sign Up"
  render 'new'
end

1 个答案:

答案 0 :(得分:1)

如果您正在学习,请参阅以下几点:

  • 检查rake routes的输出以查看正在创建的路线
  • 查看生成的html以及表单发布的网址是什么

您会注意到虽然您已定义路线注册,但仍然会创建RESTful路线并且您的表单会发布到“/ users”而不是“/ signup”。

要做的第一件事是,不要生成您不想要的路线,“GET / users / new”和“POST / users”,您可以通过将路线更改为:

resources :users, :except => [:new, :create]
get "/signup" => "users#new", :as => :signup # :as option creates a named route for you
post "/signup" => "users#create"

现在,当您呈现表单时,您可能会遇到一些关于某些命名路由不可用的错误,或者您可能没有。继续从那里尝试解决问题。如果你再次陷入困境,请回复更多细节。