2010-09-24 9 views
6

ich den folgenden Code haben, die ich aktualisieren müssen ...Rails 3 Kombinieren Sie zwei Variablen

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

Ich möchte lernen, wie zu aktualisieren, so anstatt nur die fname zeigt, zeigt es fname + lname

so für einen Rekord wie James Bond, zeigt es James Bond und verbindet es mit dem Benutzer in Rails.

dank

Antwort

18

Sie die Zeichenfolge direkt im ERB beitreten können:

<%= 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 %> 

Oder, können Sie diese hässliche Logik in eine Hilfsmethode bewegen, z.B. in app/Helfer/users_helper.rb:

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

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

Oder (das ist, was ich tun würde) können Sie eine full_name Methode im Modell setzen:

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

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

wow, ich fühle mich wie ich gerade eine Tonne gelernt habe - danke! Ich entschied mich für den 3. Vorschlag. Was denkst du über das Hinzufügen einer IF-Anweisung, wenn also eine der Variablen in der DB undefiniert ist sagt unknown ... also könnte es unbekannte Jobs sein, oder Steve unbekannt ... oder einfach unbekannt das ok für das Modell? – AnApprentice

+2

Einige würden argumentieren, dass eine solche Logik für das Modell zu "präsentational" ist und stattdessen ein View-Helfer sein sollte. Letztlich liegt es an Ihnen, zu entscheiden, wo es am nützlichsten ist: Ich habe viele "Standard" -Methoden in das Modell eingefügt. Einen Namen wie "Steve Unknown" zu präsentieren, erscheint mir seltsam, und eine seltsame ("Nicht-Standard") Präsentation wie diese sollte eher in einer Hilfsmethode als in dem Modell laufen. Aber es liegt an dir. –