他に機能しないのはなぜですか?そして、「8」だけを印刷しますが、「10」は印刷しません。どこが間違い?
<% if controller.controller_name == ('home' || 'products') %>8<% else %>10<% end %>
他に機能しないのはなぜですか?そして、「8」だけを印刷しますが、「10」は印刷しません。どこが間違い?
<% if controller.controller_name == ('home' || 'products') %>8<% else %>10<% end %>
||
nil
orでない場合、演算子は最初のオペランドを返しますfalse
。それ以外の場合は、2 番目のオペランドを返します。したがって、あなたの場合、常に「家」に戻り、「製品」にはなりません。
あなたはおそらく次のようなことを意味しました
<%= controller.controller_name.in?('home', 'products') ? 8 : 10 %>
あなたの問題に対する単純な+ 1ライナーソリューションは、次のようなものになります
if %w[home products].include? controller.controller_name
('home' || 'products')
いつも「家」に帰るからです。||
常に最初の非 nil および非 false ステートメントを返す操作です。この場合、'home'
. したがって、あなたの条件は とまったく同じcontroller.controller == 'home'
です。
あなたがやろうとしていることは次のとおりです。
<% if (controller.controller_name == 'home' || controller.controller_name == 'products') %>8<% else %>10<% end %>
あなたが想像しているように評価されます。
これを試して:
case controller.controller_name
when "home" then 8
when "products" then 8
else 10
end