2011-01-08 16 views
19

Ho un modello ERB per inviare un messaggio di posta elettronica.Modello ERB che rimuove la linea di trascinamento

Name: <%= @user.name %> 
<% if @user.phone.present? %> 
Phone: <%= @user.phone %> 
<% end %> 
Address: <%= @user.address %> 

Sto cercando di rimuovere la riga vuota tra Name e Address quando Phone è vuoto.

risultato restituito

Name: John Miller 

Address: X124 Dummy Lane, Dummy City, CA 

Risultato atteso

Name: John Miller 
Address: X124 Dummy Lane, Dummy City, CA 

Ho provato ad utilizzare <%--%> tag (per rimuovere la nuova linea di uscita) senza alcun successo.

Name: <%= @user.name %> 
<%- if @user.phone.present? -%> 
Phone: <%= @user.phone %> 
<%- end -%> 
Address: <%= @user.address -%> 

Come posso risolvere questo problema?

PS: Sono su Rails 2.3.8.

Nota 1

In questo momento sto lavorando intorno al problema utilizzando hackery rubino.

Helper Metodo:

def display_fields(names, user) 
    names.collect do |name| 
    value = user.send(name) 
    "#{name}: #{value}" unless value.blank? 
    end.compact.join("\n") 
end 

Visualizza codice

<%= display_fields(["Name", "Phone", "Address"], @user) %> 

Ma questo sembra abbastanza goffo a me. Sono interessato a sapere se qualcuno è stato in grado di ottenere il lavorando nei modelli di visualizzazione ERB.

risposta

5

Prova questo:

Name: <%= @user.name %> 
<% unless @user.phone.blank? -%>Phone: <%= @user.phone %><% end -%> 
Address: <%= @user.address %> 

Inoltre, non so se questo funzionerà:

Name: <%= @user.name %> 
<%= "Phone: #{@user.phone}" if @user.phone.present? -%> 
Address: <%= @user.address %> 

Se questo non funziona neanche, questo dovrebbe fare il trucco:

Name: <%= @user.name %><%= "\nPhone: #{@user.phone}" if @user.phone.present? %> 
Address: <%= @user.address %> 
+1

L'approccio 1, 2 non funziona. La variazione del terzo approccio è ciò che sto usando al momento. Guarda la mia domanda aggiornata. Il problema riguarda più il motivo per cui i tag '<%--%>' non funzionano. –

4

Ho avuto lo stesso problema,

era a causa di caratteri di spazio afer %>

Forse vi aiuterà a

François

+0

Sì, questo è un modo per perdere le interruzioni di riga - metti tutte le tue istruzioni erb 'if' | unless' [...] 'end' in una riga. A volte lo faccio, ma non è molto leggibile per la manutenzione. –

22

Per attivare la modalità assetto bisogna istanziare l'oggetto ERB con '-' come terzo parametro

ERB.new(template, nil, '-') 
+0

Stranamente nè 1.8, nè 1.9 documentazione dice nulla circa l'opzione '-'. È lì nel codice però.Qualcuno può chiarirlo? 1.8: http://ruby-doc.org/stdlib-1.8.7/libdoc/erb/rdoc/ERB.html#method-c-new 1.9: http://ruby-doc.org/stdlib- 1.9.3/libdoc/erb/rdoc/ERB.html # method-c-new Fonte: http://ruby-doc.org/gems/docs/p/Pimki-1.8.200/ERB/Compiler.html# method-i-prepare_trim_mode – krukid

+2

@krukid: 2.1 ora dice: http://ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html, ma non è molto preciso su ciò che fa. Domanda correlata: http://stackoverflow.com/questions/3801550/what-does-mean-in-ruby-on-rails-compared-to/25613037 –

4

Secondo gli ultimi rotaie docs (http://guides.rubyonrails.org/v2.3.8/configuring.html#configuring-action-view):

ActionView :: TemplateHandlers :: ERB.erb_trim_mode fornisce la modalità di ritaglio che verrà utilizzata da ERB. Il valore predefinito è '-'.

a cui fanno riferimento i documenti 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 -%> 

Quindi tutto quello che dovrebbe essere necessario fare è avere il trattino nel tag erb di chiusura come -%>. Potrebbe essere necessario giocare con la modalità taglio se si vedono risultati imprevisti.

3

Utilizzando l'opzione '>', si omettere a capo per le linee che terminano in%>

ERB.new(template, nil, '>') 

Ciò significa che si può avvolgere codice Ruby all'interno% tag <%>, come al solito. Purtroppo, non ho trovato un modo per rimuovere gli spazi prima del tag iniziale <%.

8

Ho dovuto combinare le risposte di willmcneilly, RobinBrouwer e fbo.

attivare la modalità Trim

ERB.new(File.read(filename), nil, '-') 

Variazione al -%>

<% $things.each do |thing| -%> 
    <object name="<%= thing.name %>"> 
    <type><%= thing.name %></type> 
    </object> 
<% end -%> 

E, infine, la conversione da DOS a Unix. Ho utilizzato quanto segue in Vim:

:set fileformat=unix 
:w 
Problemi correlati