etspring
@etspring
Начитанное быдло

Почему условие отрабатывает неполностью?

Имеется:
application.html.erb

<% if !current_page? (root_path || regulation_path || test_path || device_path) %>
<% else %>
<%= render 'banner' %>
<% end -%>


rake routes
root GET /(:locale)(.:format) welcome#test
regulation GET (/:locale)/regulation(.:format) welcome#regulation
test GET (/:locale)/test(.:format) welcome#test
device GET (/:locale)/device(.:format) welcome#device


Требуется не рендерить баннер на всех страницах кроме regulation, test , device.
При входе на / ( root ) и /regulation баннер не выводится. Но при входе на /test и /device он отображается.

В чем причина такого поведения рельсов?
  • Вопрос задан
  • 2328 просмотров
Решения вопроса 1
AMar4enko
@AMar4enko
Поведение не рельсов, а ruby.
Какой смысл вложен в:
!current_page? (root_path || regulation_path || test_path || device_path)

?
root_path || regulation_path || test_path || device_path - данное выражение вернет значение первой переменной, значение которой не nil. Следовательно current_page? у вас отрабатывает со значением root_path всегда. Почему он для PATH_INFO /regulation возвращает true при проверке root_path - это другой вопрос. Сначала надо бы "в консерватории поправить"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@proffard
Попробуйте такой код:
<%= render 'banner' unless current_page.in? [root_path, regulation_path, test_path, device_path] %>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы