Есть ли способ сделать ранний выход или "вернуться" из представления в 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 механизм для того, что я предложил или нет.
Ответы
Ответ 1
IIRC нет встроенного механизма для выхода из шаблона раньше. Это соответствует тому, как (я думаю) должен выглядеть слой представления, хотя erb - не совсем механизм шаблонов.
Старое решение заключалось в том, чтобы обернуть ваш шаблон в catch
и выбросить что-то из шаблона, как символ.
Вы также можете встроить eval внутри lamba, позволяя return
работать.
Тем не менее, хотя.
Ответ 2
В Rails 3.2.2 возврат внутри шаблона работает отлично для меня.
<% return unless allowed_tags %>
Ответ 3
Лучше всего обработать условное выражение в вашем контроллере перед тем, как отобразить шаблон. Там вы можете в начале return
создать другой шаблон (например, Добавить запись) или шаблон результатов.
Вы также можете разгрузить эту логику в Javascript в самом представлении.