0

我很难想出一种简单的方法来为这个构建案例编写 Ruby 条件。我有 3 个设计用户模型,并且基于哪个用户登录,我只希望 nag 栏显示正确的用户类。这个想法是基本上有 3 个使用设计 user_signed_in 的 if else 语句块?助手,如下所示:

<nav class="top-bar">
<section class="top-bar-section">
    <ul class="left">
    <li><%= link_to "Home", root_path %></li>
        <li><%= link_to "Admin Login Page", admin_path %></li>
        <li><%= link_to "Company Login Page", company_path %></li>
    </ul>
    <ul class="right">
        <% if user_signed_in? %>
            <li><%= link_to "Edit Profile", edit_user_registration_path %></li>
            <li><%= link_to "Logout", destroy_user_session_path, method: :delete %></li>
        <% else %>
            <li><%= link_to "Login", new_user_session_path %></li>


        <% if admin_signed_in? %>
            <li><%= link_to "Edit Profile", edit_admin_registration_path %></li>
            <li><%= link_to "Logout", destroy_admin_session_path, method: :delete %></li>
        <% else %>
            <li><%= link_to "Login", new_admin_session_path %></li>


        <% if company_user_signed_in? %>
            <li><%= link_to "Edit Profile", edit_company_user_registration_path %></li>
            <li><%= link_to "Logout", destroy_company_user_session_path, method: :delete %></li>
        <% else %>
            <li><%= link_to "Login", new_company_user_session_path %></li>
        <% end %>   
    </ul>

问题是它并没有真正像这样工作,所以问题是双重的。首先,如何简单的这种条件语法?其次,如何让它发挥作用?

4

2 回答 2

1

你可能想要一个elsif这里,而不是 3 个单独的块。尝试以下效果:

if user_signed_in?
  ...
elsif admin_signed_in?
  ...
elsif company_user_signed_in?
  ...
elsif params[:action] == 'index'
  ...
elsif params[:action] == 'admin'
  ...
else
  ...
end

或者:

if user_signed_in?
  ...
elsif admin_signed_in?
  ...
elsif company_user_signed_in?
  ...
elsif params[:action] == 'index'
  ...
elsif params[:action] == 'admin'
  ...
elsif params[:action] == 'company_user'
  ...
else
  # handle any other case where none of above conditions are met, e.g. params[:action] == 'foobar'
end
于 2013-09-24T06:15:45.590 回答
0

我能够为我的问题找到解决方案。我将发布解决方案,希望以后如果/当他们想要解决同样的问题时,它会帮助其他人。这是针对 Rails 4 的。

首先,您需要将以下内容放入 applications_controller.rb 文件中。

 def after_sign_in_path_for(resource)
 case resource
 when User then '/'
 when Admin then '/admin'
 when CompanyUser then '/company'
 end
end

然后,将原始问题视图代码重构为此。

    <ul class="right">          
            <% if user_signed_in? %>
                <li><%= link_to "Edit Profile", edit_user_registration_path %></li>
                <li><%= link_to "Logout", destroy_user_session_path, method: :delete %></li>
            <% elsif admin_signed_in? %>
                <li><%= link_to "Edit Profile", edit_admin_registration_path %></li>
                <li><%= link_to "Logout", destroy_admin_session_path, method: :delete %></li>       
            <% elsif company_user_signed_in? %>
                <li><%= link_to "Edit Profile", edit_company_user_registration_path %></li>
                <li><%= link_to "Logout", destroy_company_user_session_path, method: :delete %></li>
            <% else %>
                <% if params[:action] == 'index' %>
                    <li><%= link_to "User Login", new_user_session_path %></li>
                <% elsif params[:action] == 'admin' %>  
                    <li><%= link_to "Admin Login", new_admin_session_path %></li>
                <% else params[:action] == 'company_user' %>
                    <li><%= link_to "Company Login", new_company_user_session_path %></li>
                <% end %>   
            <% end %>   
    </ul>

希望这可以帮助。

于 2013-09-28T14:45:13.587 回答