2016-08-04 42 views
0

我有一個下拉菜單,其中包含用戶簡介頁面的鏈接(UserProfile)。 user.user_profile默認情況下不會創建,因此只有在關聯的用戶配置文件存在的情況下鏈接纔會顯示。有條件的erb不按預期方式工作

我目前有:

<% if profile_present? %> 
<%= link_to "My profile", user_profile_path(current_user.user_profile) %> 
<% end %> 

我的helper方法:

module ApplicationHelper 
    def profile_present? 
    current_user.user_profile.present? if user_signed_in? 
    end 
end 

我們的目標是,如果條件得到滿足,只有執行的代碼。

有什麼建議嗎?

當用戶配置文件不存在時,這會導致我一個ActionController::UrlGenerationError

No route matches {:action=>"show", :controller=>"user_profiles", :id=>nil} missing required keys: [:id] 

應用程序跟蹤:

app/views/layouts/_navbar.html.erb:44:in `_app_views_layouts__navbar_html_erb___2344119771953232299_47030678815860' 
app/views/layouts/application.html.erb:27:in `_app_views_layouts_application_html_erb___1177681419623347300_69843401266740' 

` UPDATE:

耙路線:

    user_profiles GET  /user_profiles(.:format)    user_profiles#index 
           POST  /user_profiles(.:format)    user_profiles#create 
       new_user_profile GET  /user_profiles/new(.:format)   user_profiles#new 
       edit_user_profile GET  /user_profiles/:id/edit(.:format)  user_profiles#edit 
        user_profile GET  /user_profiles/:id(.:format)   user_profiles#show 
           PATCH /user_profiles/:id(.:format)   user_profiles#update 
           PUT  /user_profiles/:id(.:format)   user_profiles#update 
           DELETE /user_profiles/:id(.:format)   user_profiles#destroy 
+0

這可能是簡單的東西,但除非你發佈'profile_present?'方法,否則很難說。 – MarsAtomic

+0

該錯誤可能是在您的'profile_present?'狀態。你能提供關於錯誤的更多信息嗎? – Phil

+0

你可以分享'profile_present'的代碼以及獲取當前用戶嗎?賠率是,它將'nil'傳遞給'user_profile_path'並引發錯誤。 – nicholas79171

回答

1

隨着修復,最好是從您的視圖,進入一個輔助方法去除條件..

Module ApplicationHelper 
    def user_profile_link 
    if current_user.user_profile? 
     link_to 'My profile', user_profile_path(current_user.user_profile) 
    end 
    end 
end 

ERB:

<%= user_profile_link %> 
+0

感謝您的。不幸的是,這仍然給我同樣的錯誤.... – Matthias

+0

查看具有完整錯誤消息的更新後文章 – Matthias

+0

@Matthias更新了我的答案。這很可能是因爲你沒有向路線助手傳遞正確的參數。 'rake routes'的輸出是什麼?它應該是'... path(current_user)'或'... path(current_user,current_user.user_profile)' –

0

這可能會解決你的問題

如果你有用戶表中的列user_profile及其DATA_TYPE是布爾那麼你可以使用:

if current_user.user_profile? 

直接沒有必要建立在幫助一個單獨的方法。 如果沒有配置文件顯示user_profile的設置值爲false,並且用戶創建配置文件set user_profile爲1或true。