with render_to_string rails how from ruby-on-rails erb

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