2013-12-11 2 views
2

Мне очень интересно, могу ли я перемещать рендеринг шаблона в середине шаблона. Например:Как остановить страницу рендеринга/частичный

элементы/index.html.haml

%h2 Items 

-if @items.empty? 
    %h3 There are no items 
    /X statement/ 


[email protected] do |item| 
    /items rendering/ 

Так что, если нет предметов, сообщение будет отображаться и рендеринга страницы будет прервана, в противном случае элемент списка будет оказана. Единственный способ, которым я могу это сделать, - это выражение if-else. Я пытался использовать возвращение вместо X заявление, но кажется, что это не работает, как я ожидал

ответ

5

Путь к достижению этого результата именно с помощью if-то еще заявление.

Я не знаком с Haml, но логика используя хороший «старый» Еврорадио является

<% if @items.empty? %> 
    There are no items 
<% else %> 
    <% @items.each do |item| %> 
    ... 
    <% end %>  
<% end %>  

Вы можете использовать двойной, если, если вы предпочитаете, чтобы разделить условия

<% if @items.empty? %> 
    There are no items 
<% end %>  

<% @items.each do |item| %> 
... 
<% end unless @items.empty? %>  
+0

Есть ли способ, чтобы избежать, если-то еще? Как функция die() в PHP с той лишь разницей, что die() работает глобально, и я хочу, чтобы тот же функционал в области текущего файла – atomAltera

+2

Почему вы хотите идти против природы? Даже если предположить, что может быть какой-то хак, решение действительно так просто: вы должны использовать инструкции управления потоком if-else. –

3

В принципе, вы не можете этого сделать. Что вы можете сделать, это проверить, если @items пустуют, прежде чем начать рендеринг индекса пунктов:

- if @items.empty? 
    %h3 There are no items 
- else 
    %h2 Items 
    - @items.each do |item| 
    /items rendering/ 
Смежные вопросы