【问题标题】:Preserving a custom route on form validation in Rails 3在 Rails 3 中保留表单验证的自定义路由
【发布时间】:2011-10-21 09:45:50
【问题描述】:

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

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

我很难弄清楚如何以既适合 Rails 3(The solutionsI'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

结束

【问题讨论】:

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


    【解决方案1】:

    如果你正在学习,这里有几点建议:

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

    您会注意到,虽然您定义了路由注册,但仍会创建 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"
    

    现在,当您呈现表单时,您可能会收到一些关于某些命名路由不可用或您可能不可用的错误。从那里继续并尝试解决问题。如果您再次遇到困难,请回复更多详细信息。

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      相关资源
      最近更新 更多