用户的私人资料|铁轨4 |设计

时间:2015-06-18 10:55:43

标签: ruby-on-rails devise

我正在尝试为每个用户实施私人资料页面。这是一个学习应用程序,因此人们可以访问他们在个人资料页面上支付的课程。因此,其他用户无法通过输入URL来访问个人资料页面... http响应应为404.

到目前为止,我们的想法是创建一个profiles_controller

def show
    @user = User.find(current_user)
End

这样每个用户只能访问自己的页面。

有没有最好的方法呢?

2 个答案:

答案 0 :(得分:2)

想一个理想的解决方案。 问题根本不存在。鉴于问题

  

“用户不应该看到其他用户的个人资料”

我们可以建立一个原则

  

“任何用户只有一个个人资料”

我们应该在路线中反映这种映射:

resource :profile # < not `resources`!

...该个人资料将在/profile上提供。你的路线没有任何ids,没有什么可以改变,因此无需检查。它是有道理的,为什么检查任何东西,如果我们将使用相同的资源呢?

# ProfilesController
def show
  @user = current_user
end

答案 1 :(得分:0)

before_action中的show方法可以ProfilesController。基本上,您需要检查用户可以查看的配置文件 - 仅属于该用户。

我认为网址为/users/:user_id/profiles/:id

before_filter :check_profile, only: :show

def check_profile
  user = User.find_by_id params[:user_id]
  unless params[:id] == user.profile.id
    redirect_to users_profiles_path(user, user.profile)
  end
end

这样,只要用户尝试访问其他人的个人资料,用户就会被重定向到自己的个人资料路径。