Rails为我的表单生成了此操作网址:
<form action="/auth/failure?action=update&controller=users"...
我已经对网站进行了身份验证,即使我不应该这样做,也会在我了解Auth时将其重定向到某个地方。
我的表格代码:
<%= form_for @user, :url => { 'controller' => 'users', 'action' => 'update'} do |f| %>
谢谢!
答案 0 :(得分:1)
你必须知道两件事
: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,以阐明您想要做什么。