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 はルーティング エラーを停止するためだけに存在します。何にリンクすればよいか完全にはわかりません。かなりの数の組み合わせを試しましたが、明らかに私のレール初心者の心には、やらなければならない何かが欠けています。どんな助けでも大歓迎です!

(レール 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

これはあなたを助けるかもしれないと思います。

「Rails ルーティング from the Outside in」では、

たとえば、現在ログインしているユーザーのプロファイルを常に /profile に表示したいとします。この場合、単一のリソースを使用して、(/profile/:id ではなく) /profile を show アクションにマップできます。

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

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

それはプライベートプロフィールページ用です。

パブリック プロファイル ページはプライベート プロファイル ページとは異なるため、パブリック プロファイルを表示するプロファイル コントローラーを作成します。

于 2013-07-03T14:02:35.157 に答える