繁体   English   中英

设计在执行新的自定义操作后未登录

[英]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

同样,通过上述方式定义路线,将为您生成此路径方法。 您也可以通过属性定义此方法,如果您曾经遇到过这种情况的话。

因此,如果进行上述更改,则应该:

  1. 能够恢复您的登录名(以及其他任何向用户发送的POST方法)
  2. 有一个方法enable_users_path来获取URL
  3. 能够发布到/ users / enable

那应该让你走。 有关路由的更多信息: http : //guides.rubyonrails.org/routing.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM