用户身份验证:更正ruby语法以确定正确的用户?

时间:2012-04-16 00:59:35

标签: ruby-on-rails

我想确保用户可以看到他们的个人资料,但没有其他人。我认为这会奏效,但事实并非如此。

  def show
    if current_user 
      if current_user.id != User.find(params[:id]) 
        @user = User.find(params[:id])
        @title = @user.name
      end if 
   else
      redirect_to root_path   
    end
  end

知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

您希望比较id而不是尝试将一个ID与User类进行比较:

@user = User.find(params[:id])
if current_user.id == @user.id
  @title = @user.name
end

但你最好的选择可能就是给出像CanCan这样的东西。它可以大大简化与权限相关的任务!

答案 1 :(得分:1)

你快到了。你应该把它改成这个。

def show
    if current_user != User.find(params[:id]) 
      @user = User.find(params[:id])
      @title = @user.name
    else
      redirect_to root_path   
    end
  end

你正在做什么不起作用的原因是因为你基本上是在询问user.id是否等于用户对象。您应该询问current_user对象是否等于User.find(id),因为它将返回User对象。希望有所帮助。