Лучший способ избежать этого, если еще логика частично?- Рельсы 3.1 - PullRequest
2 голосов
/ 19 ноября 2011

У меня есть частичная часть, которая используется по всему сайту.У меня есть частичное изображение, которое я хочу связать с определенной страницей на всех страницах, кроме одного конкретного действия контроллера.

1. Есть ли способ вставить следующую ссылку без 2если еще установить? ...

<a href="#">
  <img src="#" />
</a>

Я пытаюсь избежать этого:

<% if (current controller != xyz) %>
  <a href="#">
<% end %>
   <img src="#" />
<% if (current controller != xyz) %>
  </a>
<% end %>

2.Как я могу на самом деле проверить, какой контроллер назвал эту часть?

Приведенный выше код является только псевдокодом.

PS. Я знаю, что это не так много повторений, но я просто использую этот упрощенный случай в качестве примера.Любопытно, есть ли в Rails что-то, чего я не знаю, чтобы избежать этого.

Ответы [ 2 ]

11 голосов
/ 19 ноября 2011

Это именно то, для чего link_to_if!

link_to_if(controller_name == 'xyz', image_tag('src'), 'http://target.com')

Это добавит изображение независимо от того, является ли условие истинным или нет, и поместит его в ссылку только тогда, когда условие выполнено. Есть также связанный link_to_unless, который может быть более семантически уместным в вашем случае.

Редактировать: Я обновил пример выше, чтобы использовать правильный код для проверки имени контроллера. В представлении доступен метод controller_name, который возвращает строчную версию имени вашего контроллера. Это также в хеше params.

1 голос
/ 19 ноября 2011

Это сводится к этому вопросу: «Что вы хотите дублировать».

В вашем вопросе вы дублируете тест if. Во встречном примере (ниже) я продублирую тег img.

Пример счетчика

<% if (current controller != xyz) %>
  <a href="#">
    <img src="#"/>
  </a>
<% end %>
<% if (current controller == xyz) %>
    <img src="#"/>
<% end %>

Я предпочитаю продублировать то, что с наименьшей вероятностью изменится, и, если я не знаю, что изменится с наименьшей вероятностью, то по умолчанию используется минимальное количество копий.

Кратчайший является неопределенным нарочно. Тег изображения, как написано, кажется самым коротким, но я подозреваю, что если часть обычно будет самой короткой.

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