Hay un par de cosas diferentes que se desarrollan:
if @controller.controller_name == "projects" || @controller.controller_name == "parts"
esto da el comportamiento que desea que estoy asumiendo. La lógica es bastante básico: return true si el nombre controladora es o "proyectos" o "partes"
Otra forma de hacer esto es:
if ["projects", "parts", "something else..."].include? @controller.controller_name
que comprobará si el nombre del controlador está en algún lugar en el lista.
Ahora para los otros ejemplos:
if @controller.controller_name == ("projects" || "parts")
Esto no va a hacer lo que quiera. Primero evaluará ("projects" || "parts")
(lo que dará como resultado "proyectos"), y luego solo comprobará si el nombre del controlador es igual a eso.
if @controller.controller_name == "projects" || "parts"
Este es aún más raro. Esto siempre dará como resultado verdadero. Primero comprobará si el nombre del controlador es igual a "proyectos". Si es así, la declaración se evalúa como verdadera. Si no, evalúa "partes" por sí mismo: que también evalúa como "verdadero" en ruby (cualquier objeto que no sea nil se considera "verdadero" para propósitos de lógica booleana ")
en realidad,' o 'dos cadenas juntos le daremos la primera cadena, para apoyar modismos como 'a || =" hello "' y 'a = somefunc() || default' –
Tiene toda la razón. Actualicé mi respuesta. – jerhinesmith