Подтвердить что ты не робот

Есть ли способ сделать ранний выход или "вернуться" из представления в Rails?

Предоставляет ли Rails какой-либо способ выхода из раннего или "возврата" из отображаемого представления?

Например, у меня есть представление, структурированное следующим образом:

<h1>Your records summary</h1>

<% if @current_user.has_records? %>
  <p>You don't have any records.</p>
<% else %>
  ... long block of view emission code here ...
<% end %>

В коде, отличном от erb, я просто return из этого условия if, и не нужно было бы размещать этот длинный блок внутри else. Это будет выглядеть так:

<h1>Your records summary</h1>

<% if @current_user.has_records? %>
  <p>You don't have any records.</p>
  <% return (or something) %>
<% end %>
... long block of view emission code here ...

Есть ли способ сделать что-то подобное в erb?

РЕДАКТИРОВАТЬ: Чтобы быть ясным, Я не прошу альтернативных подходов, например, были предложены. Я не Rails noob. Я просто хочу знать, предоставляет ли Ruby механизм для того, что я предложил или нет.

4b9b3361

Ответ 1

IIRC нет встроенного механизма для выхода из шаблона раньше. Это соответствует тому, как (я думаю) должен выглядеть слой представления, хотя erb - не совсем механизм шаблонов.

Старое решение заключалось в том, чтобы обернуть ваш шаблон в catch и выбросить что-то из шаблона, как символ.

Вы также можете встроить eval внутри lamba, позволяя return работать.

Тем не менее, хотя.

Ответ 2

В Rails 3.2.2 возврат внутри шаблона работает отлично для меня.

<% return unless allowed_tags %>

Ответ 3

Лучше всего обработать условное выражение в вашем контроллере перед тем, как отобразить шаблон. Там вы можете в начале return создать другой шаблон (например, Добавить запись) или шаблон результатов.

Вы также можете разгрузить эту логику в Javascript в самом представлении.