停止删除admin,其名称如'string_name'

时间:2013-11-15 14:38:03

标签: ruby-on-rails

我正在尝试阻止某个特定的管理员使用ruby on rails从数据库中删除 我已经尝试过一些东西但是代替了

代码

编辑2将User.name更改为@ user.name

模型

after_destroy :can_not_destroy_super_admin

private
def can_not_destroy_super_admin
    if @user.name == "super admin"
        raise "Can't delete this admin"
    end
end

我认为它是User.name的一个问题,但我知道它看到这段代码,因为我在使用我在这里试过的不同代码时出错了。

我知道这是一个相对粗略的方法来停止删除管理员,但这是一种简单的方法来获得我需要做的事情。

非常感谢任何建议或帮助。

Edit.1

这是破坏方法

控制器

def destroy
 @user = User.find(params[:id])
 begin
  @user.destroy
  flash[:notice] = "User #{@user.name} deleted"
 rescue Exception => e
  flash[:notice] = e.message
 end
 respond_to do |format|
  format.html { redirect_to users_url }
  format.json { head :no_content }
 end
end

1 个答案:

答案 0 :(得分:2)

我猜你的毁灭动作看起来像这样?

def destroy
  @user = user.find params[:id]
  @user.destroy
end

如果是这种情况,您要在回调中检查的用户是@user.name,而不是User.name。您希望确保您调用destroy的实际用户实例与您正在检查其名称的实例相同。

编辑:根据评论中的确定,回调实际上是在模型上,我误解为在控制器中。在模型中,要引用对象名称,只需要name,而不是User.name@user.name