7

使用设计和单独的控制器(用户)进行身份验证,这是一个“显示”操作

class UsersController < ApplicationController
#before_filter :authenticate_user!

  def show
    @user = User.find(params[:id])

    respond_to do |format|
        format.html # show.html.erb
        format.xml { render :xml => @user }
    end
  end
end

到目前为止,视图 (users/show.html.erb) 仅显示访问配置文件的用户名

<%= @user.username %>

路由也:

resources :users

如果他们获得指向它的链接/告诉地址,我希望这些个人资料页面可以公开访问,但也希望当前登录的用户可以访问他的个人资料的链接。我的标题中的一个片段:

<li><%= link_to "Profile", @user %></li>
<li><%= link_to "Settings", edit_user_registration_path %></li>
<li><%= link_to "Logout", destroy_user_session_path, method: "delete" %></li>

目前,@user 只是用来阻止路由错误。我不完全确定要链接到什么,尝试了很多组合,但显然我的 Rails 新手头脑缺少我需要做的额外事情。任何帮助深表感谢!

(轨道 4,红宝石 2.0.0)

旁注我还想最终允许指向个人资料页面的链接以以下格式显示 id + 用户名:#{id}-#{username}(而不仅仅是 users/1 --> users/1 -bbvoncrumb)。

4

3 回答 3

15

如果您希望它链接到给定用户的页面,您只需将User实例作为参数传递给。因此,如果您想链接到 Devise 中当前登录用户的个人资料,您只需要:link_toshow

<li><%= link_to "Profile", current_user %></li>
于 2013-07-03T13:47:03.387 回答
3

如果您想查看当前登录的用户配置文件,请确保您已登录。

添加before_filter :authenticate_user!用户控制器。

然后在标题链接中<li><%= link_to "Profile", current_user %></li>

于 2013-07-03T13:50:15.310 回答
3

我想这可能会对你有所帮助。

在“从外向内布线”中,

例如,您希望 /profile 始终显示当前登录用户的个人资料。在这种情况下,您可以使用单一资源将 /profile(而不是 /profile/:id)映射到 show 操作。

match "profile" => "users#show", :as => 'profile'

<li><%= link_to "Profile", profile_path %></li>

那是用于私人个人资料页面。

由于公共个人资料页面与私人个人资料页面不同,我将创建一个个人资料控制器来显示公共个人资料。

于 2013-07-03T14:02:35.157 回答