我有一个下拉菜单,其中包含指向用户个人资料页面(UserProfile
)的链接。默认情况下不会创建user.user_profile
,因此链接应仅显示是否存在关联的用户配置文件。
我目前有:
<% if profile_present? %>
<%= link_to "My profile", user_profile_path(current_user.user_profile) %>
<% end %>
我的助手方法:
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'
` 的更新:
rake routes:
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 :(得分:1)
除了修复之外,建议从视图中删除条件并转换为辅助方法..
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script>
$(window).on('beforeunload', function(){
return 'Are you sure you want to leave?';
});
</script>
<强> ERB:强>
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
答案 1 :(得分:0)
这可以解决您的问题
如果在user表中有一个user_profile列,并且其data_type是Boolean,那么你可以使用:
if current_user.user_profile?
直接没有必要在helper中创建单独的方法。 如果没有配置文件存在设置值user_profile为false,并且用户创建配置文件时将user_profile设置为1或true。