表格中的身份验证失败

时间:2013-08-29 15:03:55

标签: ruby-on-rails-3

Rails为我的表单生成了此操作网址:

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

我已经对网站进行了身份验证,即使我不应该这样做,也会在我了解Auth时将其重定向到某个地方。

我的表格代码:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

你必须知道两件事

  • Ruby区分符号(:controller:update)和字符串('controller''update')。
  • 在这种情况下,您无需指定:url

因此,对于您当前的代码,正确的行很简单:

form_for @user do |f|

如果@user是新记录,form_for将指向create的{​​{1}}操作,如果UsersController是现有记录,{{1} }}会自动指向@user操作。 Rails非常聪明,可以做到这一点: - )

如果您确实想使用form_for的{​​{1}}属性,则有两种选择:

  • 使用路由助手方法:update
  • 使用正确的路径哈希::url

如果您在form_for中使用form_for @user, :url => user_path(@user), :method => :put(我建议您使用它),Rails会使用REST样式构建网址,并且您需要知道两件事:   - 集合是一组实体(在您的情况下,用户)   - 会员是一个实体

因此,集合URL可以指向多个实体,成员URL只能是一个实体。

使用URL-hash描述form_for @user, :url => { :controller => :users, :method => :update, :id => @user.id }操作时,必须使用resources :users,因为config/route.rb只能在成员上进行,而不能在集合上进行。因此,您必须使用特殊的HTTP方法(:id)构建成员URL,以阐明您想要做什么。