Проверьте, не является ли строка ни одной из двух строк

Я просто изучаю RoR, поэтому, пожалуйста, несите меня. Я пытаюсь написать инструкцию if или с строками. Вот мой код:

<% if controller_name != "sessions" or controller_name != "registrations" %>

Я пробовал много других способов, используя круглые скобки и ||, но ничего не работает. Возможно, это из-за моего фона JS...

Как я могу проверить, не является ли переменная не равной первой или второй?

Ответ 1

Это основная логическая проблема:

(a !=b) || (a != c) 

всегда будет истинным, если b!= c. Как только вы помните, что в логической логике

(x || y) == !(!x && !y)

тогда вы можете найти свой выход из темноты.

(a !=b) || (a != c) 
!(!(a!=b) && !(a!=c))   # Convert the || to && using the identity explained above
!(!!(a==b) && !!(a==c)) # Convert (x != y) to !(x == y)
!((a==b) && (a==c))     # Remove the double negations

Единственный способ (a == b) && (a == c), чтобы быть истинным, для b == c. Поэтому, поскольку вы дали b!= C, оператор if всегда будет ложным.

Просто гадать, но, возможно, вы хотите

<% if controller_name != "sessions" and controller_name != "registrations" %>

Ответ 2

<% unless ['sessions', 'registrations'].include?(controller_name) %>

или

<% if ['sessions', 'registrations'].exclude?(controller_name) %>