条件erb没有按预期工作

时间:2016-08-04 13:09:44

标签: ruby-on-rails erb

我有一个下拉菜单,其中包含指向用户个人资料页面(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

2 个答案:

答案 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。