使用除非运算符

时间:2012-07-25 01:54:55

标签: ruby

我正在学习“Ruby Way”并获得乐趣,但是,我有这个块按预期工作,但我知道它可能会更好。有人可以告诉我使用unless的正确方法吗?这是在UsersController中。

def destroy
  User.find(params[:id]).destroy unless current_user.admin? 
  flash[:success] = "User destroyed."
  redirect_to users_path      
end

3 个答案:

答案 0 :(得分:3)

无论用户是否被销毁,您都将设置Flash消息。

在您的情况下,您应该使用if。

def destroy
  if current_user.admin?
      User.find(params[:id]).destroy
      flash[:success] = "User destroyed."
  else
      flash[:success] = "You can't destroy user."    
  end
  redirect_to users_path
end

答案 1 :(得分:1)

你编写代码的方式实际上是最简洁的;虽然你可能想把整个事情搞得一团糟。这样当你调用destroy时,“用户被破坏了。”当帐户没有被实际删除时,将不会打印并且不会调用redirect_to users_path。

def destroy
  unless current_user.admin?
      User.find(params[:id]).destroy
      flash[:success] = "User destroyed."
      redirect_to users_path
  end

end

答案 2 :(得分:0)

在我提出所有有用的建议之后,这就像我想的那样紧凑。

def destroy
      User.find(params[:id]).destroy 
      flash[:success] = "User destroyed."
      redirect_to users_path

      unless current_user.admin? 

  end
end