web-dev-qa-db-ja.com

if、elsif、elseステートメントhtml erb初心者

Html.erbのif、elsif、else文に問題があります。 erbのif/elseステートメントに関する多くの質問を見てきましたが、elsifは含まれていなかったので、助けを求めたいと思いました。

ここに私のhtml.erbがあります:

<% if logged_in? %>

          <ul class = "nav navbar-nav pull-right">
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
              Account <b class="caret"></b>
            </a>

          <ul class="dropdown-menu pull-right">
                  <li><%= link_to "Profile", current_user %></li>
                  <li><%= link_to "Settings", edit_user_path(current_user) %></li>
                  <li class="divider"></li>
                  <li>
                    <%= link_to "Log out", logout_path, method: "delete" %>
            </li>
          </ul>
          </li>
        </ul>



     <% elsif has_booth?(current_user.id) %>

      <ul>

        <li>TEST</li>

      </ul>



<% else %>
        <ul class="nav navbar-nav pull-right">
          <li><%= link_to "Sign Up", signup_path %></li>
          <li><%= link_to "Log in", login_path %></li>
        </ul>
      <% end %>

これが私のhas_boothsメソッドです:

module BoothsHelper

def has_booth?(user_id)
  Booth.exists?(user_id: user_id)
end 

end

ヘッダーナビゲーションに、ユーザーごとに3種類のコンテンツを用意します。ログインしたユーザー、ブースを作成したログインしたユーザー、ログアウトしたユーザー。これまでのところ、3つのうち2つしか作成できません。変えてみた

<% elsif has_booth?(current_user.id) %>

<% elsif logged_in? && has_booth?(current_user.id) %>

それもうまくいきませんでした。私は私の声明を正しく書いていますか?どんな考えでも感謝します。ありがとう。

8
Kelly

問題は、最初の条件が真であるため、そこで停止することです。あなたの最初の状態:

<% if logged_in? %>

ブースがない場合でも、最初の条件が真であるため、elsifに到達することはありません。次のいずれかが必要です。

<% if logged_in? && has_booth?(current_user.id) %>
  // code
<% elsif logged_in? && !has_booth?(current_user.id) %>
  // code
<% else %>
  // code
<% end %>

あるいは、それらを2つのif/elseに分離する方がよりクリーンなアプローチかもしれません。

<% if logged_in? %>
  <% if has_booth?(current_user.id) %>
    // code
  <% else %>
    // code
  <% end %>
<% else %>
  // code
<% end %>
19
RichardAE

よりクリーンなアプローチは、ステートメントをフラットにし、最初にログインしていない状態を処理して、ブースがあるかどうかと一緒にテストする必要がないようにすることです。

<% if !logged_in? %>
  // not logged in code
<% elsif has_booth?(current_user.id) %>
  // logged in and has booth code
<% else %> 
  // logged in and does not have booth code
<% end %>

unless logged_in?を使用することもできますが、elseとelsifは意味的にはあまり意味がありません。

0
Glyde Burdick