2010-09-24 22 views
6

Mam następujący kod, który trzeba zaktualizować ...Rails 3 Połączyć dwie zmienne

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

Chcę dowiedzieć się, jak zaktualizować tak, że zamiast po prostu pokazując fname, pokazuje FName + lname

Tak więc dla rekordu, takiego jak James Bond, pokazuje on powiązanie z james i łączy go z użytkownikiem w Railsach.

dzięki

Odpowiedz

18

Możesz dołączyć ciąg tuż 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 %> 

Albo, można przenieść ten brzydki logiki do metody pomocnika, np w app/pomocników/users_helper.rb:

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

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

Albo (to jest to, co chciałbym zrobić) można umieścić FULL_NAME metody w modelu:

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

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

wow, czuję jakbym właśnie się nauczył - dziękuję! Postanowiłem pójść z trzecią sugestią. Co sądzisz o dodaniu do niego instrukcji JEŻELI, więc jeśli którakolwiek z zmiennych jest niezdefiniowana w DB, jest nieznana ... więc może to być nieznana praca ,, lub steve unknown ... lub po prostu nieznana ... to ok dla modelu? – AnApprentice

+2

Niektórzy twierdzą, że taka logika jest zbyt "prezentacyjna" dla modelu i powinna być zamiast niej pomocnikiem widoku. Ostatecznie decyzja o tym, gdzie jest najbardziej przydatna, należy do Ciebie: umieszczam w modelu wiele "standardowych" metod prezentacji. Prezentowanie nazwy takiej jak "Steve Unknown" wydaje mi się dziwne, a dziwna ("niestandardowa") prezentacja taka powinna prawdopodobnie przebiegać raczej metodą pomocniczą niż modelem. Ale to zależy od Ciebie. –