0

他に機能しないのはなぜですか?そして、「8」だけを印刷しますが、「10」は印刷しません。どこが間違い?

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

4 に答える 4

9

||nilorでない場合、演算子は最初のオペランドを返しますfalse。それ以外の場合は、2 番目のオペランドを返します。したがって、あなたの場合、常に「家」に戻り、「製品」にはなりません。

あなたはおそらく次のようなことを意味しました

<%= 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 に答える