2010-09-24 35 views
6

Ho il seguente codice che ho bisogno di aggiornare ...Rails 3 Unire due variabili

<% @users.each do |user| %> 
    <tr> 
    <td><%= link_to user.fname, user %></td> 
    </tr> 
<% end %> 

Voglio imparare come aggiornare in modo che invece di mostrare il fname, mostra fname lname +

quindi per un disco come James Bond, mostra james bond e lo collega all'utente in Rails.

grazie

risposta

18

È possibile aderire la stringa proprio nel ERB:

<%= link_to user.fname + " " + user.lname, user %> 
<!-- or, slightly better: avoids problems with nil values --> 
<%= link_to "#{user.fname} #{user.lname}", user %> 
<!-- or, even better --> 
<%= link_to [user.fname, user.lname].join(" "), user %> 

alternativa, è possibile spostare quel brutto logica in un metodo di supporto, per esempio in app/aiutanti/users_helper.rb:

module UsersHelper 
    def full_name(user) 
    [user.fname, user.lname].join(" ") 
    end 
end 

<%= link_to full_name(user), user %> 

Oppure, (questo è quello che vorrei fare) si può mettere un metodo full_name nel modello:

class User < ActiveRecord::Base 
    def full_name 
    [fname, lname].join(" ") 
    end 
end 

<%= link_to user.full_name, user %> 
+0

wow, mi sento come ho appena imparato una tonnellata - grazie! Ho deciso di andare con il 3 ° suggerimento. Cosa ne pensi dell'aggiunta di un'istruzione IF, quindi se una delle due variabili non è definita nel DB è sconosciuta ... quindi potrebbero essere lavori sconosciuti ,, o steve sconosciuti ... o solo sconosciuti .. È che va bene per la modella? – AnApprentice

+2

Alcuni sostengono che la logica di questo tipo è troppo "presentazionale" per il modello e dovrebbe invece essere un aiuto per la visualizzazione. Alla fine spetta a te decidere dove è più utile: ho inserito molti metodi di presentazione "standard" nel modello. Presentare un nome come "Steve Unknown" mi sembra strano, e una presentazione strana ("non standard") come quella dovrebbe probabilmente andare in un metodo di supporto piuttosto che nel modello. Ma dipende da te. –