2011-08-17 7 views
39

私はユーザーページshowを作成しようとしていますが、それはDeviseでこれを行う方法について混乱しています。 Deviseにはどんな種類の定義も付属しているようには見えません - Deviseが1つを作るために実装しているコントローラにアクセスする方法はありますか、それを上書きする必要はありますか?Deviseを使用した `Users`ショーページの作成

答えて

62

あなたはapplication_controllerから継承users_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] 
+0

だから、私はそのすべてをやって、 'show'を' index'に '@users = Users.all'に変更しましたが、私はこのエラーを受け取ります:初期化されていない定数UsersController :: Users。 エラーが見つかりました。「@users = @ User.all」 – tcatchy

+0

これを実行すると、特定のユーザープロファイルにリンクし、ログインしなくてもオープン/アクセス可能にするにはどうすればよいですか?ありがとう! – westman2222

+0

上記のコードは、ログインしなくてもユーザーショー(プロファイル)ページにアクセスできるようにします –

-11

deviseで使用するビューを生成することができます。このビューは、必要に応じて変更できます。

rails g devise:views 
+4

ですが、まだユーザー向けの表示ページはありません。新しいページと編集ページのみ。 –

+1

悪い答えは、最初に質問を読んで、それは – SsouLlesS

+0

の前にdevyと動作していないようです 'rails g devise:views'は新しいと編集のためのビューを生成します。ショーページはありません。コードを試してルートを表示すると、ショーはありません。 –

32

ユーザーのルートは、このように、devise_forユーザーのルート以下でなければならないということを忘れないでください:

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

また、プライマリとしてユーザ名または電子メールを使用している場合代わりに、通常のIDのキー、あなたは次のようにあなたのルートを宣言することによって、ルーティング競合を避ける必要があります::工夫とCURRENT_USER/other_userプロファイルを示す

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

After installing devise

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

rails generate controller Users 

次にshowアクションを作成してのparams IDを持つユーザーを見つける:

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

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

<%= @user.email %> 

ユーザへのリンクショーのページ:

def index @users = User.all end 

は、[ユーザービュー]フォルダ内index.html.erbを作成します:

を今、あなたは他のプロファイルは、ユーザーのコントローラ内のindexアクションを作成表示する場合

<%= link_to "current_user_show", current_user %> 

このため

<% @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 %> 

これは動作するはずです!

+0

設定/ルートは不要ですか? –

関連する問題