我在我的rails应用程序中使用Devise进行身份验证,并且在我的布局文件夹中有一个_header部分用于导航栏。我想在那里放置一个创建配置文件的链接(用户模型创建w / devise,用户has_one配置文件和配置文件belongs_to用户)但仅当用户配置文件尚未存在时。 我想为此创建一个方法并将if语句放入视图中,但我无法弄清楚创建方法的位置以及它的外观。
基本设计方法在检查用户是否已登录时工作正常。我想要一种类似的方法来检查用户配置文件是否存在。
布局/ _header.html.erb
<% if user_signed_in? %>
<% if user.profile(current_user) %>
<li><%= link_to "Create Profile", new_user_profile_path(current_user) %></li>
所以我的问题: 在哪里放置方法(helper / controller / model / appcontroller / etc.)? 该方法的外观如何?
答案 0 :(得分:1)
您可以在助手文件(app/helpers/
)中对其进行定义。您可以使用application_helper
但为了更好的一致性,我们会将此文件命名为users_helper
:
# app/helpers/users_helper.rb
module UsersHelper
def user_has_profile?(user = current_user)
return false unless user.present?
Profile.where(user_id: user.try(:id) || user).exists?
end
end
并像这样使用它:
# any view
<% if user_signed_in? && !user_has_profile? %>
答案 1 :(得分:0)
我会将它作为一个名为has_profile的方法放在helpers目录(app / helpers / application_helper.rb)中?
该方法看起来像
def has_profile?
current_user.profile.present?
end
然后在你看来:
<% if user_signed_in? && has_profile? %>
<li><%= link_to "Create Profile", new_user_profile_path(current_user) %></li>