【发布时间】:2011-12-30 20:05:37
【问题描述】:
我对 Rails 很陌生,所以请原谅我的知识有限。
我有一个名为 users 的控制器。它有两种方法:new 和create。
当调用users#new 时,会显示一个表单来注册我网站上的帐户。我为此设置了一个路由,使 URL /signup,如下所示:
match "signup" => "users#new", :as => "signup"
当用户导航到 /signup 时,我创建一个新的 user 实例变量并向他们显示表单,如下所示:
用户控制器
def new
@user = User.new
end
新视图
<%= form_for @user do |f| %>
<!-- Form code here... -->
<!-- Then at the end: -->
<%= f.submit :value => 'Sign Up' %>
<% end %>
当用户提交这个表单时,它会将数据发送到users#create。
UsersController 中 users#create 的代码如下所示:
def create
@user = User.new(params[:user])
if @user.save
redirect_to root_url, :notice => 'Signed Up!'
else
render "new"
end
end
if/else 语句用于检查 rails 是否能够创建我的新用户。如果是,它重定向到索引没有问题。
如果它无法创建用户,它会呈现我的新视图,并正常显示错误。
但是,它随后提供给我们的 URL 是 /users,因为当它提交表单时,它会提交给 /users。如何获取它,如果注册失败,它会重定向到 /signup,并且仍然显示发生的错误?
更新:routes.rb
Flightdb::Application.routes.draw do
get "users/new"
get "home/about"
get "home/index"
root :to => 'home#index'
match 'about' => 'home#about'
match "signup" => "users#new", :as => "signup"
resources :users
end
【问题讨论】:
-
你能链接你的
routes.rb文件吗?发生这种情况是因为映射到 POST users#create 的当前路由是/users如果你希望它是/signup你需要在你的 routes.rb 文件中编辑它,例如你应该删除创建和添加的路由一个新的,match "signup" => "users#create", :as => "signup", :method => :post -
OK - 我想要的只是将用户数据发送到 create 方法(就像我一样),然后我希望它传回错误(如果有的话) 到
new方法,因此它不应该更改 url -
@AlexCoplan - 这不是它在 Rails 中通常的工作方式。通常,如果您有错误,您不会重定向 - 您只需重新显示同一页面......您提到的确切问题可能有一个看起来很糟糕的 url。
-
我们通常“绕过它”的方式是为 get/post 使用相同的 url - 但将其路由到两个不同的控制器操作(取决于 http 动词) - 如所述@jpemberthy
-
你需要
get "signup" => "users#new", :as => "signup"和post "signup" => "users#create"
标签: ruby-on-rails forms routing