我设法制作了一个仅用于注册和登录的应用程序.目前,我允许用户通过邮件帐户激活(遵循本教程:
https://www.railstutorial.org/book/account_activation_password_reset和’rails generate controller AccountActivations –no-test-framework ‘)但我希望管理员能够激活或停用用户.在我的用户模型中,我设法定义了两种方法:
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 %>
我的路线看起来像这样:
get 'password_resets/new' get 'password_resets/edit' root 'static_pages#home' get 'help' = 'static_pages#help' get 'about' = 'static_pages#about' get 'contact' = 'static_pages#contact' get 'signup' = 'users#new' get 'login' = 'sessions#new' post 'login' = 'sessions#create' delete 'logout' = 'sessions#destroy' resources :users resources :account_activations,only: [:edit] resources :password_resets,only: [:new,:create,:edit,:update]
问题是我不知道如何继续.我不想使用Devise或CanCan,因为作为初学者,我想知道如何手动完成.请帮助我实现从应用程序激活和停用用户(Admin只能这样).
解决方法
好的,首先阅读Hartl’s Rails教程的
chapters 9 and 10.
rails g migration add_admin_to_users admin:boolean
这会给你.admin? “免费”,因为Active Record将生成此方法.
我会像这样写你的按钮
<% if current_user.admin? && @user != current_user %> <%=link_to "deactivate",deactivate_path(user_id: @user),method: :post,data: { confirm: "Are you sure?" } %> <% end %>
然后在你的控制器中:
def deactivate user = User.find(params[:user_id]) if current_user.admin? user.deactivate_account! redirect_to users_path else redirect_to :back end end
在您的路线中,类似于:
post "/deactivate",to: "users#deactivate"
无论如何,我给你一个粗略的指导,但是请阅读Hartl的教程,因为你的用例几乎涵盖在那里.
祝好运!