Ruby on rails 允许管理员激活或停用用户--Rails

Ruby on rails 允许管理员激活或停用用户--Rails,ruby-on-rails,ruby,admin,activation,Ruby On Rails,Ruby,Admin,Activation,我已经成功地制作了一个只适用于注册和登录的应用程序。目前,我允许用户通过邮件帐户激活(遵循本教程:和“rails生成控制器帐户激活-无测试框架”),但我希望管理员能够激活或停用用户。在我的用户模型中,我设法定义了两种方法: def activate_account! update_attribute :is_active, true end def deactivate_account! update_attribute :is_active, false end 在

我已经成功地制作了一个只适用于注册和登录的应用程序。目前,我允许用户通过邮件帐户激活(遵循本教程:和“rails生成控制器帐户激活-无测试框架”),但我希望管理员能够激活或停用用户。在我的用户模型中,我设法定义了两种方法:

def activate_account!   
  update_attribute :is_active, true 
end

def deactivate_account!   
  update_attribute :is_active, false 
end
在我的用户部分视图中,我设法

<% if current_user.admin? && !current_user?(user) %> 
  <%= button_to "Deactivate", user, data: { confirm: "Are you sure?" } %> 
<% end %>
问题是我不知道如何继续。我不想使用Desive或CanCan,因为作为初学者,我想知道如何手动操作。请帮助我实现从应用程序激活和停用用户(管理员只能这样做)

好的,首先阅读Hartl的Rails教程

向用户添加和管理标志

rails g migration add_admin_to_users admin:boolean
这将为您提供
.admin?
“免费”,因为活动记录将生成此方法

我会这样写你的按钮

<% if current_user.admin? && @user != current_user %> <%=link_to "deactivate", deactivate_path(user_id: @user), method: :post, data: { confirm: "Are you sure?" } %> <% end %>
在您的路线中,类似于:

post "/deactivate", to: "users#deactivate"
无论如何,我给你们一个粗略的指导,但一定要阅读Hartl的教程,因为你们的用例几乎都在这里介绍过了


祝你好运

根据Rails惯例:

PUT用于更新现有资源

POST用于创建新资源

因此,在更新
用户
记录时,您应该将其设置为
PUT
请求,而不是
POST

您应该这样定义您的路线:

put 'deactivate/:id(.:format)', :to => 'users#deactivate', :as => :deactivate_user
并且,在您的
用户
部分中:

<%=link_to "Deactivate", deactivate_user_path(user), method: :put, data: { confirm: "You sure?" }%>


现在,使用现有代码,一切都可以正常工作。

嗨,蔡斯!非常感谢。。已经读过那些章节了。。他们很棒!但还是有问题。尽管如此,我认为这是一个路由问题,因为应用程序现在有停用和确认按钮,但无法完成操作。我还将控制器更改为:
def deactivate User.find(params[:id])。deactivate flash[:success]=“User deactivated”重定向到用户\u url end
,并在\u action:admin\u User之前先定义
,仅:[:destroy,:deactivate]
。可能有什么问题?你犯了什么错误?如果您可以添加错误,我将编辑我的回复以解决此问题。在网页上:
我们很抱歉,但出现了问题。
。在日志中:
…lib/action\u dispatch/templates/rescues/routing\u error.html.erb在rescues/layout中
路由错误。你能分享你更新的路线和链接吗?粘贴的路线在这里:。不确定链接:config/routes.rb?还是应用程序的链接?我还没有合并或推送它。
put 'deactivate/:id(.:format)', :to => 'users#deactivate', :as => :deactivate_user
<%=link_to "Deactivate", deactivate_user_path(user), method: :put, data: { confirm: "You sure?" }%>