User show
ページ(プロファイルページとして機能します)を作成しようとしていますが、Deviseでこれを行う方法について混乱しています。 Deviseにshow
定義が付属しているようには見えません-Deviseが実装するためにDeviseが実装しているコントローラーにアクセスする方法はありますか、またはオーバーライドする必要がありますか?
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]
次のように、ユーザールートがdevise_forユーザールートの下にあることを忘れないでください。
#routes.rb
devise_for :users
resources :users, :only => [:show]
また、通常のIDの代わりにユーザー名または電子メールを主キーとして使用している場合、次のようにルートを宣言することにより、ルーティングの競合を回避する必要があります。
#routes.rb
devise_for :users, :path_prefix => 'd'
resources :users, :only => [:show]
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 %>
これはうまくいくはずです!