Есть ли способ избежать переключения контекста в файлах erb - PullRequest
0 голосов
/ 30 апреля 2011

Новичок из бритвы Microsoft MVC3 +.

Скажи, что у меня было:

<% if foo %>
   <%= bar %>
<% end %>

Есть ли способ, которым я могу иметь:

<% if foo
   magic_function_that_goes_to_output_buffer bar
end %>

Существует ли эта функция?

Edit: Чтобы быть абсолютно ясным, я ищу решение, которое могу использовать несколько раз в блоках <%%>. Решение между блоками <% =%> просто перемещает проблему.

Ответ "Нет" приемлем, так как тогда я могу перестать раздражаться этим и просто двигаться дальше.

Решение принято: Мой application_helper выглядит как

    def out(content)
    @output_buffer.safe_concat(content)
end

Мой взгляд выглядит как

    prevReview = nil 
@review.each do |review|
    out render :partial => 'review', 
               :locals => { :review => review, :showDate => (prevReview.nil? ? true : prevReview.updated_at === review.updated_at) } 
    prevReview = review
end

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

Да, есть способ.

Но прежде чем я скажу это, пожалуйста, не делайте этого, если у вас нет действительно веской причины.Это потому, что вы будете привязаны к деталям реализации, которые могут измениться в любое время.

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

Вот оноis:

<% if foo
     @output_buffer.concat("any string will do")
     bar = call_what_you_want
     @output_buffer.concat(bar.to_s)
   end
%>

Хорошо, это хорошо работает на Rails 2.x, но с Rails 3 вы будете подключены к безопасному выходному буферу, поэтому вам следует вызвать #safe_concat вместо #concat для переменной @output_buffer.

1 голос
/ 30 апреля 2011

Да, попробуйте это:

<%= bar if foo %>

Edit:

Вы тоже можете сделать это:

<%= if true 
 "true"
else
 "false"
end %>

Но если у вас много логики, вам лучше использовать помощника. Итак, у вас вспомогательный файл:

def magic_function_that_goes_to_output_buffer(condition)
  if condition
    "true"
  else
    "false"
  end
end

На ваш взгляд:

<%= magic_function_that_goes_to_output_buffer(foo) %>
0 голосов
/ 30 апреля 2011

Может быть, вы хотите посмотреть на хамла. С хамлом-кодом выглядит чище и стильнее.

  <% if foo %>
       <%= bar %>
    <% end %>

Этот код erb преобразуется в:

 - if foo
   = bar

Вот и все. Пара полезных ссылок сайт haml и страница плагина haml-rails . Удачи!

...