1

私は2つのモデルUsers(devise gem)とProfilesを持っています

  class User < ActiveRecord::Base
    has_one :profile

  class Profile < AciveRecord::Base
    belongs_to :user

各モデルのビューのすべてが正常に機能しますが、アプリケーション レイアウトに link_to が必要です。

  <% if user_signed_in? %>
  <li><%= link_to current_user.username , profile_path(@profile) %></li>

しかし、それは私にこのエラーを示しています:

 ActionController::RoutingError (No route matches {:action=>"show", :controller=>"profiles"})

マイ プロファイル コントローラ

  def show 
  @profile = Profile.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @profile }
end

終わり

私のレーキルート:

            profiles GET    /profiles(.:format)                             profiles#index
                     POST   /profiles(.:format)                             profiles#create
         new_profile GET    /profiles/new(.:format)                         profiles#new
        edit_profile GET    /profiles/:id/edit(.:format)                    profiles#edit
             profile GET    /profiles/:id(.:format)                         profiles#show
                     PUT    /profiles/:id(.:format)                         profiles#update
                     DELETE /profiles/:id(.:format)                         profiles#destroy
    new_user_session GET    /users/sign_in(.:format)                        devise/sessions#new
        user_session POST   /users/sign_in(.:format)                        devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format)                       devise/sessions#destroy
       user_password POST   /users/password(.:format)                       devise/passwords#create
   new_user_password GET    /users/password/new(.:format)                   devise/passwords#new
  edit_user_password GET    /users/password/edit(.:format)                  devise/passwords#edit
                     PUT    /users/password(.:format)                                            devise/passwords#update

 cancel_user_registration GET    /users/cancel(.:format)                    registrations#cancel
        user_registration POST   /users(.:format)                           registrations#create
    new_user_registration GET    /users/sign_up(.:format)                   registrations#new
   edit_user_registration GET    /users/edit(.:format)                      registrations#edit
                          PUT    /users(.:format)                           registrations#update
                          DELETE /users(.:format)                           registrations#destroy

リンクに currentuser.username (Devise ユーザー名は既にあります) と current_user のプロファイル ページへのリンクが表示されるようにします。

ありがとう!

4

1 に答える 1

0

実際にレイアウトを使用するアクションで設定していないように見える@profileため、nil として表示され、ルーターはルートを生成するために ID を必要とします。

アプリケーション レイアウトでレンダリングするすべてのアクションで @profile を何かに設定する必要があります。これはおそらく、グローバルな before_filter の仕事です。

于 2012-05-06T06:38:41.133 に答える