2014-02-01 3 views
7

Моя проблема заключается в том, что я пытаюсь сделать что-то вродеКак я могу получить текущую страницу? для соответствия нескольким действиям?

current_page?(controller: 'tigers', action:('index'||'new'||'edit')) 

, который возвращает истинное, когда контроллер тигры и действие либо индекс, новый или редактировать.

Вышеупомянутая информация не выдает ошибки, а соответствует только первому действию.

Помощь!

+0

Лично я бы просто написал метод, чтобы проверить их по одному и сделать с ним. Прыгая через обручи, чтобы попытаться выполнить однострочную проверку, это не стоит времени. – mellowfish

+0

Интересно. Я все еще относительно нубийский, пытаясь найти оптимальный способ сделать что-то. Оцените ввод. – atonyc

+0

Рубин отличный, и магические методы, которые он иногда дает, могут иногда опьянять, но никогда не забывайте, что иногда просто писать код - лучший способ решить проблему. ;) – mellowfish

ответ

11

Подробней, но работает:

current_page?(controller:'bikes') && 
(current_page?(action:'index') || 
    current_page?(action:'new') || 
    current_page?(action:'edit')) 

менее многословным, также работает:

params[:controller] == 'bikes' && %w(index new edit).include?(params[:action]) 

% вес() является ярлыком для построения массивов пространства с разделителями строк

+0

Все хорошие ответы, я выбрал этот, потому что его один лайнер, как я искал. Благодаря! – atonyc

4

Альтернатива использованию текущей_страницы? метод заключается в том, чтобы напрямую проверить хеш params:

params[:action] == ('index' || 'new' || 'edit') 

Вернет true, если по индексу, новому или редактировать. Вы также можете получить доступ к контроллеру через params [: controller].

+1

Это, похоже, не работало для меня, но я, возможно, поставил его в неправильное место. – atonyc

3

Вы можете также делают примерно следующее:

if current_page?(root_path) || current_page?(about_path) || current_page?(contact_path) || current_page?(faq_path) || current_page?(privacy_path) 

Примечание. Не оставляйте пустое место перед скобкой, иначе оно не будет работать.

+0

** Использование помощника маршрута, как показано выше, кажется более гибким, чем другие доступные опции. ** У меня возникла проблема, когда шаблон в моем корневом проекте с использованием более явного синтаксиса (например, обеспечение действия, контроллер в хэше) вызывал проблемы в монтированном двигателе, который использовал один и тот же шаблон. В принципе, двигатель ожидал, что указанный контроллер будет частью двигателя. Использование помощника пути маршрута исправило ситуацию! Спасибо. – mdpatrick

Смежные вопросы