用户专用个人资料 |导轨 4 |设计



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

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

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

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

有没有最好的方法?

想一个理想的解决方案。 问题甚至不存在的那个。鉴于问题

"用户不应看到其他用户的个人资料"

我们可以建立在原则之上

"任何用户只有一个配置文件"

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

resource :profile # < not `resources`!

。并且该配置文件将在 /profile 上提供。您的路线中没有任何ID,没有任何要更改的内容,因此无需检查。这是有道理的,如果我们无论如何都要使用相同的资源,为什么要检查任何东西?

# ProfilesController
def show
  @user = current_user
end

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

我假设网址是/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

这样,每当用户尝试访问其他人的个人资料时,他将被重定向到他自己的个人资料路径。

最新更新