我正在尝试阻止某个特定的管理员使用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
答案 0 :(得分:2)
我猜你的毁灭动作看起来像这样?
def destroy
@user = user.find params[:id]
@user.destroy
end
如果是这种情况,您要在回调中检查的用户是@user.name
,而不是User.name
。您希望确保您调用destroy的实际用户实例与您正在检查其名称的实例相同。
编辑:根据评论中的确定,回调实际上是在模型上,我误解为在控制器中。在模型中,要引用对象名称,只需要name
,而不是User.name
或@user.name
。