web-dev-qa-db-ja.com

Deviseを使用して「ユーザー」ショーページを作成する

User showページ(プロファイルページとして機能します)を作成しようとしていますが、Deviseでこれを行う方法について混乱しています。 Deviseにshow定義が付属しているようには見えません-Deviseが実装するためにDeviseが実装しているコントローラーにアクセスする方法はありますか、またはオーバーライドする必要がありますか?

43
steffi2392

users_controllerを継承するapplication_controllerを生成し、そこにカスタムshowメソッドを定義する必要があります。ビューを作成し、そのためにルーティングすることを忘れないでください。例:

#users_controller.rb
def show
  @user = User.find(params[:id])
end

#in your view
<%= @user.name %>

#routes.rb
match 'users/:id' => 'users#show', via: :get
# or 
get 'users/:id' => 'users#show'
# or
resources :users, only: [:show]
71
Sergey Kishenin

次のように、ユーザールートがdevise_forユーザールートの下にあることを忘れないでください。

#routes.rb
devise_for :users
resources :users, :only => [:show]

また、通常のIDの代わりにユーザー名または電子メールを主キーとして使用している場合、次のようにルートを宣言することにより、ルーティングの競合を回避する必要があります。

#routes.rb
devise_for :users, :path_prefix => 'd'
resources :users, :only => [:show]
36
Ashitaka

deviseでcurrent_user/other_userプロファイルを表示:

Deviseをインストールした後

ユーザーコントローラーを作成します。

Rails generate controller Users

次に、showアクションを作成し、params idを持つユーザーを見つけます。

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

ユーザービューフォルダーにshow.html.erbファイルを作成します。

<%= @user.email %>

ユーザー表示ページへのリンク:

<%= link_to "current_user_show", current_user %>

ここで、他のプロファイルを表示する場合は、ユーザーコントローラーでインデックスアクションを作成します。

def index @users = User.all end

ユーザービューフォルダにindex.html.erbを作成してから、次の操作を行います。

<% @users.each do |user| %>
<%= link_to user.username, user %>
<%= user.email %>
<% end %>

このリンクは次のとおりです。

<%= link_to "show_index_of_users", users_path %>

これにより、ユーザーindex.html.erbファイルにリンクされ、そこでループが作成され、ユーザープロファイルにリンクされます。

<% @users.each do |user| %>
<%= link_to user.username, user %>
<%= user.email %>
<% end %>

これはうまくいくはずです!

16