Как вывести текст в формате rthml без <% = variable%> - PullRequest
1 голос
/ 23 октября 2009

Я искал решение этого вопроса последние пару дней. Это просто раздражение, но я ненавижу не знать, как что-то делать ...

Среда: Ruby, Rails, rhtml

Проблема: Когда я повторяю коллекцию в rhtml, я хотел бы уменьшить количество используемых тегов <%%> и <% =%>. Следующее кажется раздутым:

Пример

<% @products.each do |p| %>
  <%=  @p.name %>
<% end %>

РЕДАКТИРОВАТЬ: как исключить <% =%> внутри блока?

Я бы предпочел сделать:

<% @products.each do |p| 
  puts @p.name 
end %>

В некоторых ситуациях может быть разрешено использование любого из них ... Однако я знаю, что могу сделать это с помощью jsp:

<% for(int i=0; i<10;i++){
  System.out.print(i);
} %>

Заранее спасибо за ваш вклад.

Ответы [ 6 ]

5 голосов
/ 23 октября 2009

если вы хотите быть менее многословным, посмотрите на хамл, на вашем примере это будет:

- @products.each do |p|
  = @p.name
2 голосов
/ 23 октября 2009
<% @products.each do |p| 
  _erbout << @p.name 
end %>

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

0 голосов
/ 24 октября 2009

Вам нужно будет использовать <% = внутри такого блока. Вы можете добиться удобочитаемости, используя <% = с блоком: </p>

<%= @products.map do |p|
      p.name
    end.join("\n") %>
0 голосов
/ 23 октября 2009

Вы также можете попробовать использовать что-то вроде haml для очистки шаблонов (вместе с помощниками и частями).

0 голосов
/ 23 октября 2009

Несколько других возможностей, в зависимости от контекста, если ваш код представления кажется слишком раздутым:

  • Использовать частичные E.g.:

в вашем основном файле:

<%= render(:partial => "product", :collection => products) %>

и в частичном, просто используйте:

<%= product.name %>

Теперь это кажется надуманным для простого примера, такого как этот, но предполагая, что что-то более сложное, он абстрагируется от цикла и делает код более понятным.

  • Использовать вспомогательные методы
0 голосов
/ 23 октября 2009

Используйте print вместо put.

...