我正在Rails应用程序中开发导航栏。该应用程序的用户可以是多个组织的成员。我正试图建立一个";上下文切换";菜单,在那里他们可以选择要查看的组织,这样他们就可以专注于该组织中的内容。结构如下:
users
表:有一个id和一个display_nameorganizations
表:具有一个id和一个organization_name- 链接的
user_organizations
表用户和组织
在users
表中,有一个字段current_organization_id
,它是organizations
表中组织的外键。为了使current_organization_id
有效,用户/组织关系必须存在于user_organization
中。好吧,这就是上下文。接下来是问题。
现在在应用程序的导航栏中,我可以很好地显示current_user.current_organization_id
。但它只是一个id,比如5,对用户没有帮助。我真的很难真正展示对应于current_organization_id
的organization_name
。
views/layouts/_header.html
<header>
<nav style="display: flex; justify-content: center; align-items: center;">
<div style="flex-direction:row; display:flex;">
<a href="/">
App Name
</a>
<% if current_user.nil? %>
<%= link_to new_user_session_path do %>Sign In<% end %>
<%= link_to new_user_registration_path do %>Sign Up<% end %>
<% else %>
<%= link_to "My Organizations", organizations_path %>
<%= link_to "Edit Account", edit_user_registration_path %>
<%= link_to destroy_user_session_path, method: :delete do %>Log Out<% end %>
<%= current_user.current_organization_id.organization.organization_name%>
<% end %>
</div>
</nav>
</header>
views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>AppName</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= render partial: "layouts/header", locals: {organization: @organization} %>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
</html>
以下是我尝试过的:
执行<%= current_user.current_organization_id.organization.organization_name %>
不起作用。我还尝试过将organization作为导航栏部分的局部变量传入,如下所示:<%= render partial: "layouts/header", locals: {organization: @organization} %>
,但这也没有帮助。有什么想法吗?谢谢
有人帮我弄明白了这一点,所以我想我应该在这里发布答案。我将其添加到我的用户模型中。
型号/用户.rb
def current_organization
@current_organzation ||= Organization.find_by!(id: current_organization_id).organization_name
end
然后把我的标题部分改成了这行。views/layouts/_header.html
<%= current_user.current_organization %>