Ruby - ЕСЛИ и НЕ УКАЗАНО - PullRequest
       2

Ruby - ЕСЛИ и НЕ УКАЗАНО

0 голосов
/ 04 октября 2011

Я новичок в Ruby и сомневаюсь в правильности написания этой части:

<% if session[:user_id].nil? || (params[:controller] != 'home' && params[:action] != 'index') %>
    something
<% else %>  
    something else
<% end %>

Но первая часть конструкции IF неверна (особенно часть params ). Если бы я попробовал это:

<% if params[:controller] != 'home' && params[:action] != 'index' %>

Значит, я получил плохие результаты, но если это:

<% unless params[:controller] == 'home' && params[:action] == 'index' %>

Так что теперь у меня уже хорошие результаты ...

Где может быть проблема? Что может быть не так? Первый код - это то, что мне нужно, но я не знаю, как все объединить ....

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

A != B AND C != D - это НЕ то же самое, что !(A == B AND C == D)

Первое верно только тогда, когда пары ОБА различны.Второе верно, если пара EITHER отличается.В вашем примере, чтобы преобразовать исключение в if, если вы сделаете:

<% if params[:controller] != 'home' || params[:action] != 'index' %>

, чтобы условие было истинным, если ЛИБО не совпадает.

Читайте здесь http://en.wikipedia.org/wiki/Logical_connective

2 голосов
/ 04 октября 2011

Если это работает для вас:

<% unless params[:controller] == 'home' && params[:action] == 'index' %>

Эквивалент с if будет:

<% if !(params[:controller] == 'home' && params[:action] == 'index') %>

А если передать это отрицание внутри, вы получите:

<% if params[:controller] != 'home' || params[:action] != 'index' %>

Обратите внимание, что не только == становится !=, но и && становится ||

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...