Rails 为我的表单生成了这个操作 url:
<form action="/auth/failure?action=update&controller=users"...
我已通过该网站的身份验证,即使我不应该,它也会重定向到我理解的某个地方 Auth。
我的表格代码:
<%= form_for @user, :url => { 'controller' => 'users', 'action' => 'update'} do |f| %>
谢谢!
Rails 为我的表单生成了这个操作 url:
<form action="/auth/failure?action=update&controller=users"...
我已通过该网站的身份验证,即使我不应该,它也会重定向到我理解的某个地方 Auth。
我的表格代码:
<%= form_for @user, :url => { 'controller' => 'users', 'action' => 'update'} do |f| %>
谢谢!
有两件事你必须知道
:controller
, :update
)和字符串('controller'
, 'update'
)。:url
在这种情况下,您不需要指定。因此,对于您当前的代码,正确的行很简单:
form_for @user do |f|
如果@user
是新记录,form_for
将指向create
您的动作UsersController
,如果@user
是现有记录,form_for
将自动指向update
动作。Rails 足够聪明地做到这一点:-)
如果你真的想使用:url
的属性form_for
,你有两个选择:
form_for @user, :url => user_path(@user), :method => :put
form_for @user, :url => { :controller => :users, :method => :update, :id => @user.id }
Rails 使用 REST 样式来构建 url,如果你使用resources :users
in config/route.rb
(我建议你使用它),它有两件事你需要知道: -集合是一组实体(在你的情况下,用户) -成员是一个实体
所以集合 URL 是你可以期待多个实体的东西,成员 URL 是你只能期待一个实体的东西。
当您使用 URL-hash:id
描述操作时必须使用,因为只能在成员上完成,而不是在集合上完成。所以你必须用一个特殊的 HTTP 方法 ( ) 建立一个成员 URL 来澄清你想做什么。update
update
PUT