[英]Devise not logging in after new custom action
嗨,我是Rails的新手,尝试添加新的post方法时遇到了麻烦。
我想创建一个启用用户的新方法。
所以我修改了我的用户控制器,使其具有以下方法
def enable
if (!@user.enabled)
@user.enabled = true;
if @user.save
UserMailer.send_enabled_message(@user).deliver
redirect_to users_url, notice: 'User was successfully enabled.'
else
redirect_to users_url, notice: 'Could not enable user.'
end
else
redirect_to users_url, notice: 'Could not enable user.'
end
结束
并且我在路线中添加了以下内容:
match 'users/:id' => 'users#enable', :via => 'post', :action => :enable
并将以下内容添加到显示用户表的视图中:
<td><%= link_to 'Enable', user, method: :enable, data: { confirm: 'Are you sure?' } %></td>
这一切似乎都有效,但是我认为我的路线已覆盖我的登录信息,因为我无法再登录了。 我需要创建一个新表单还是可以像这样快速提交?
同样,当您使用link_to时,我该如何做类似的事情: <%= link_to 'enable', enable_user(user) %>
我如何/在何处创建enable_user
方法?
谢谢GoGoCarl现在让它工作了。 不得不将我的路线更改为此:
resources :users do
post 'enable', on: :member
end
我对此的看法:
<td><%= link_to 'Enable', enable_user_path(user), method: :enable, data: { confirm: 'Are you sure?' } %></td>
您只需在routes.rb中更改路线定义即可回答所有问题。 删除您添加的行,大概在以下位置:
resources :users
更改为:
resources :users do
post 'enable', :on => :collection
end
这会在资源级别为集合(因此,/ users)添加一个处理程序,而不是一个成员(/ users / 2)。 它由用户控制器中的“启用”方法自动处理。
因此,第一个答案-是的,您正在匹配发布给用户的所有URL,因此确实覆盖了登录POST。 如上定义将以您想要的方式路由事物。
第二个答案,您如何获得URL? 好了,既然已经以这种方式路由了,那么您可以运行rake路由来查看定义的路径是什么。 现在,我将为您省去麻烦:
enable_users_path
因此,您可以执行以下操作:
link_to 'enable', enable_users_path
同样,通过上述方式定义路线,将为您生成此路径方法。 您也可以通过属性定义此方法,如果您曾经遇到过这种情况的话。
因此,如果进行上述更改,则应该:
那应该让你走。 有关路由的更多信息: http : //guides.rubyonrails.org/routing.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.