ruby on rails - render_to_string - Plantilla ERB eliminando la línea de cola
routes in ruby on rails (6)
Al usar la opción ''>'', omitirá nuevas líneas para las líneas que terminan en%>
ERB.new(template, nil, ''>'')
Eso significa que puedes envolver el código Ruby dentro de las etiquetas <%%>, como de costumbre. Desafortunadamente, no he encontrado una manera de eliminar los espacios antes de la etiqueta inicial <%.
Tengo una plantilla ERB para enviar un correo electrónico.
Name: <%= @user.name %>
<% if @user.phone.present? %>
Phone: <%= @user.phone %>
<% end %>
Address: <%= @user.address %>
Estoy tratando de eliminar la línea en blanco entre Name
y Address
cuando el Phone
está vacío.
Resultado devuelto
Name: John Miller
Address: X124 Dummy Lane, Dummy City, CA
Resultado Esperado
Name: John Miller
Address: X124 Dummy Lane, Dummy City, CA
He intentado usar etiquetas <%--%>
(para eliminar la nueva línea final) sin ningún éxito.
Name: <%= @user.name %>
<%- if @user.phone.present? -%>
Phone: <%= @user.phone %>
<%- end -%>
Address: <%= @user.address -%>
¿Cómo puedo solucionar este problema?
PD: Estoy en Rails 2.3.8.
Nota 1
En este momento, estoy solucionando el problema usando Ruby hackery.
Método de ayuda:
def display_fields(names, user)
names.collect do |name|
value = user.send(name)
"#{name}: #{value}" unless value.blank?
end.compact.join("/n")
end
Ver codigo
<%= display_fields(["Name", "Phone", "Address"], @user) %>
Pero esto me parece bastante torpe. Estoy interesado en saber si alguien ha podido conseguir que <%--%>
funcionen en las plantillas de vista ERB.
De acuerdo con los últimos documentos de rieles ( http://guides.rubyonrails.org/v2.3.8/configuring.html#configuring-action-view ):
ActionView :: TemplateHandlers :: ERB.erb_trim_mode proporciona el modo de ajuste que debe usar ERB. El valor predeterminado es ''-''.
Hacen referencia a los documentos de ERB ( http://www.ruby-doc.org/stdlib-2.0.0/libdoc/erb/rdoc/ERB.html#method-c-new )
If trim_mode is passed a String containing one or more of the following modifiers, ERB will adjust its code generation as listed:
% enables Ruby code processing for lines beginning with %
<> omit newline for lines starting with <% and ending in %>
> omit newline for lines ending in %>
- omit blank lines ending in -%>
Así que todo lo que debe hacer es tener el guión en su etiqueta erb de cierre como -%>
. Es posible que deba jugar con el modo de recorte si observa resultados inesperados.
Para habilitar el modo de recorte, debe crear una instancia del objeto ERB con ''-'' como tercer parámetro
ERB.new(template, nil, ''-'')
Prueba esto:
Name: <%= @user.name %>
<% unless @user.phone.blank? -%>Phone: <%= @user.phone %><% end -%>
Address: <%= @user.address %>
Además, no sé si esto funcionará:
Name: <%= @user.name %>
<%= "Phone: #{@user.phone}" if @user.phone.present? -%>
Address: <%= @user.address %>
Si eso tampoco funciona, debería hacer el truco:
Name: <%= @user.name %><%= "/nPhone: #{@user.phone}" if @user.phone.present? %>
Address: <%= @user.address %>
Tuve que combinar las respuestas de willmcneilly, RobinBrouwer y fbo.
habilitar el modo de recorte
ERB.new(File.read(filename), nil, ''-'')
Cambiar a -%>
<% $things.each do |thing| -%>
<object name="<%= thing.name %>">
<type><%= thing.name %></type>
</object>
<% end -%>
Y finalmente, convertir de dos a unix. Utilicé lo siguiente en Vim:
:set fileformat=unix
:w
Yo tuve el mismo problema,
se debió a caracteres espaciales afer %>
Tal vez te ayude
François