是否可以在try()中使用else语句?
else块将被忽略:
var options = {
legend: {
show: true,
position: "ne",
//backgroundColor: "#fdff00",
backgroundOpacity: "0",
margin: [-50,0]
//container: null or jQuery object/DOM element/jQuery expression
}, ecc
};
$(document).ready(function(){
graph = $('.Graph').plot(formatFlotData(),options).data("plot");
});
如果try(:current_order)失败,我想实现 <% if try(:current_order) %>
<% if current_order.state != 'complete' && current_order.line_items.count > 0 %>
<%= current_order.line_items.count %>
<% end %>
<% else %>
<%= " ".html_safe %>
<% end %>
的打印。
更新:
我在标题中使用此代码段,当我打开一个没有current_order可用的静态页面时,我得到:
<li class="icon icon-cart">
<%= link_to spree.cart_path do %>
<div class="cart">
<%= image_tag("shopping_bag.png", class: 'shopping-bag') %>
<span class="cart-items-count">
<% if current_order %>
<% if current_order.state != 'complete' && current_order.line_items.count > 0 %>
<%= current_order.line_items.count %>
<% end %>
<% else %>
<% end %>
</span>
</div>
<% end %>
</li>
有没有使用试用的简单修复?
答案 0 :(得分:2)
为什么在这里使用try
?只需使用current_order
本身:
<% if current_order %>
<% if current_order.state != 'complete' && current_order.line_items.count > 0 %>
<%= current_order.line_items.count %>
<% end %>
<% else %>
<% end %>
如果current_order
为nil
,则会显示
。
对于记录,try
用于避免在nil
上调用方法(因此,如果foo.try(:bar)
为nil
,则foo
将返回nil
} {而foo.bar
会引发NoMethodError
)。这与您的用例无关,因此您不需要try
。
答案 1 :(得分:1)
好的,可能有一个更优雅的解决方案,但这有效:
<% if defined?(current_order) && !current_order.blank? %>
而不是if current_order
答案 2 :(得分:1)
.try
一个ActiveSupport实用程序,用于在可能为nil的变量上调用方法时防止出现nil错误。它在这里工作,因为隐式主题是视图上下文,但不是非常惯用。
相反,您应该使用local_assigns[:current_order]
来检查局部变量是否可用于视图,部分或布局。
让我们开始清理它。
current_order.state != 'complete'
闻起来。确定订单是否完整不应由视图完成!
class Order < SomeOtherClass
# ...
def complete?
state == 'complete'
end
end
然后我们可以清理部分:
<% if local_assigns[:current_order] %>
<% if !current_order.complete? && current_order.line_items.any? %>
<%= current_order.line_items.size %>
<% end %>
<% else %>
<%# no order found %>
<%= " ".html_safe %>
<% end %>
如果已加载记录,则使用.size
代替.count
可以避免执行COUNT
查询。
答案 3 :(得分:0)
else
try
您可以检查是否存在current_order
<% if current_order.present? && current_order.state != 'complete' && current_order.line_items.count > 0 %>
<%= current_order.line_items.count %>
<% else %>
<% end %>