そこに行くいくつかの異なるものがあります:第三文は同等ですので、==よりprecedence低いのです
if @controller.controller_name == "projects" || @controller.controller_name == "parts"
これはあなたが、私が想定していたい動作を提供します。ロジックはかなり基本的なものです:コントローラ名がどこかであるかどうかをチェックします
if ["projects", "parts", "something else..."].include? @controller.controller_name
:のcontroler名はいずれかの「プロジェクト」または「部」
これを行う別の方法がある場合は、trueを返します。リスト。今、他の例については
:
if @controller.controller_name == ("projects" || "parts")
これは、あなたがやりたいことはありません。 ("projects" || "parts")
が最初に評価され(結果は「projects」になります)、コントローラー名がそれと等しいかどうかを確認するだけです。
if @controller.controller_name == "projects" || "parts"
これはさらに奇妙なものになります。これは常に真実になります。まず、コントローラ名が "projects"に等しいかどうかをチェックします。そうであれば、ステートメントはtrueと評価されます。そうでない場合は、それ自身の "部品"を評価します。これもルビーで "真"と評価されます(ブール論理の目的では、非ゼロのオブジェクトはすべて「真」とみなされます)。
実際には、 'a || =" hello "'と 'a = somefunc()|| default'のようなイディオムをサポートするための最初の文字列を提供します –
あなたは本当に正しいです。 – jerhinesmith