0

Rails 为我的表单生成了这个操作 url:

<form action="/auth/failure?action=update&controller=users"...

我已通过该网站的身份验证,即使我不应该,它也会重定向到我理解的某个地方 Auth。

我的表格代码:

<%= form_for @user, :url => { 'controller' => 'users', 'action' => 'update'} do |f| %>

谢谢!

4

1 回答 1

1

有两件事你必须知道

  • Ruby 区分符号(: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 :usersin config/route.rb(我建议你使用它),它有两件事你需要知道: -集合是一组实体(在你的情况下,用户) -成员是一个实体

所以集合 URL 是你可以期待多个实体的东西,成员 URL 是你只能期待一个实体的东西。

当您使用 URL-hash:id描述操作时必须使用,因为只能在成员上完成,而不是在集合上完成。所以你必须用一个特殊的 HTTP 方法 ( ) 建立一个成员 URL 来澄清你想做什么。updateupdatePUT

于 2013-08-29T15:21:14.263 回答