我在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
我希望标题导航为不同的用户提供三种不同类型的内容。登录用户,已创建booth的登录用户以及已注销用户。到目前为止,我似乎只能在三项工作中做出2项。我试过改变
<% elsif has_booth?(current_user.id) %>
到
<% elsif logged_in? && has_booth?(current_user.id) %>
这也不起作用。我正确地写了我的陈述吗?任何想法都赞赏。谢谢。
答案 0 :(得分:18)
问题是你的第一个条件是真的,所以它就在那里停止了。你的第一个条件:
<% 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 %>
或者它可能是一种更简洁的方法将它们分成两个if / else:
<% if logged_in? %>
<% if has_booth?(current_user.id) %>
// code
<% else %>
// code
<% end %>
<% else %>
// code
<% end %>
答案 1 :(得分:0)
一种更干净的方法是将语句变平整,首先处理未登录的条件,因此您不必对其进行测试以及是否有摊位:
<% 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在语义上与除非有特别的意义,否则它的含义就不那么清楚了。