0

为什么其他不起作用?并且只打印“8”但不打印“10”。哪里错了?

<% if controller.controller_name == ('home' || 'products') %>8<% else %>10<% end %>
4

4 回答 4

9

||如果不是nilor ,则运算符返回第一个操作数false。否则返回第二个操作数。因此,在您的情况下,它总是返回“家”,而不是“产品”。

你可能的意思是

<%= controller.controller_name.in?('home', 'products') ? 8 : 10 %>
于 2012-06-27T18:39:11.417 回答
5

一个简单的 + 1 班轮解决方案可以解决您的问题,如下所示

if %w[home products].include? controller.controller_name
于 2012-06-27T18:40:49.263 回答
4

因为('home' || 'products')总会回到“家”。||是一个总是返回第一个非 nil 和非 false 语句的操作。在这种情况下,'home'。所以你的条件正好等于controller.controller == 'home'

你想要做的是:

<% if (controller.controller_name == 'home' || controller.controller_name == 'products') %>8<% else %>10<% end %>

它将按照您的想象进行评估。

于 2012-06-27T18:41:46.690 回答
0

试试这个:

case controller.controller_name
when "home" then 8
when "products" then 8
else 10
end
于 2012-06-27T18:42:49.517 回答