Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4-管理员编辑另一个用户';s信息_Ruby On Rails - Fatal编程技术网

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