Ruby on rails Rails 4-管理员编辑另一个用户';s信息
我想要一个简单的系统,其中用户有三种类型(Ruby on rails Rails 4-管理员编辑另一个用户';s信息,ruby-on-rails,Ruby On Rails,我想要一个简单的系统,其中用户有三种类型(user、admin和medic),标记为admin的用户可以“激活”其他用户的帐户,以便他们可以访问某些特权。我试着用一个简单的按钮来做这件事,但我还没有找到一个方法来做到这一点 代码的按钮为: <%= button_to "Change user Type to Medic", :method=> "activate_medic" %> 结束 在我的routes.rb文件中有一个post'users/activate_medic'
user
、admin
和medic
),标记为admin
的用户可以“激活”其他用户的帐户,以便他们可以访问某些特权。我试着用一个简单的按钮来做这件事,但我还没有找到一个方法来做到这一点
代码的按钮为:
<%= button_to "Change user Type to Medic", :method=> "activate_medic" %>
结束
在我的routes.rb
文件中有一个post'users/activate_medic'
。
但是,按下按钮会显示:
ActionController::RoutingError (No route matches [POST] "/users/1"):
如果我试图编辑用户1 不完全是我在原始问题中提出的,但是: 我允许管理员用户完全编辑给定用户的信息,并代理其用户类型和权限: 用户控制器:
before_action :correct_user, only: [:edit, :update]
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user) || current_user.type == "Admin"
end
但是,为了避免任何用户只访问他们的编辑页面并授予自己管理员权限,我编辑了表单,只允许管理员查看编辑其类型的字段:
<% if @user.type == "Admin" %>
<%= f.label :type, "User Type:" %>
<%= f.text_field :type, class: 'form-control' %>
<% end %>
链接到中的方法选项用于指定HTTP谓词,而不是自定义方法的名称。根据您提供的信息,我将这样处理问题:
button_to "Change user Type to Medic", activate_user_path(@user), method: :patch
以及一个专用控制器:
class ActivateUserController
def update
@user = User.find(params[:id])
if @user.activate
flash[:info] = "Success"
end
redirect_to @user
end
end
路线:
resources :users do
patch :activate, to: 'activate_user#update', as: :activate_user
end
最后,将用户行为移动到用户模型中:
class User
def activate
self.update_attribute!(:active, true)
end
end
这似乎给了我错误
未定义的方法“activate\u user\u path”
我怀疑您复制并粘贴了示例代码,该示例代码仅用于说明一个概念。也许可以在这里查看一下Rails路由文档:它似乎正在创建一条users\u activate\u users
路由。修复按钮以反映这一点后,我得到一个错误,日志显示:ActionController::RoutingError(未初始化的常量ActivateUserController):
class User
def activate
self.update_attribute!(:active, true)
end
end