2008-10-01 74 views
0

此問題是基於another question of mine(謝天謝地回答)。將數據成員注入到對象

因此,如果在一個模型我有這樣的:

def self.find_extended 
    person = Person.find(:first) 
    complete_name = person.firstname + ', ' + person.lastname 
    return person 
end 

我怎樣才能在人物對象在我的控制器/視圖注入完整的名字,所以我可以通過person.complete_name訪問它?

謝謝您的時間,
的Silviu

回答

6

我認爲要做到這一點的最好辦法是在Person類中創建完整名稱屬性:

def complete_name 
    firstname + ', ' + lastname 
end 
1

您可以定義:

attr_accessor :complete_name 

在人的模型,然後就去做person.complete_name= person.firstname + ', ' + person.lastname

+0

您的答案對我來說同樣適用,但我發現IDBD的解決方案更加優雅 – 2008-10-01 17:25:08

1

另外,另一個快速筆記。你不需要Ruby中的那個return語句。您的方法中的最後一個語句將被返回。

2

如果您打算迭代大量記錄,那麼使用插值字符串將會提高內存效率。

def complete_name 
    "#{firstname}, #{lastname}" 
end 

使用String#+連接字符串會在每個步驟創建String對象。換句話說,如果firstname'John'lastname'Doe',然後這些字符串將存在於內存中,需要進行垃圾收集的一些點:'John''Doe''John, ',最後'John, Doe'。更不用說,有三個方法調用,而不是一個字符串插值,它可以在C中更高效地實現。

如果使用#{}表示法,則可以避免創建'John, '字符串。在處理一個或兩個記錄時無關緊要,但是在使用各種方法使用的大型數據集中,它們可以快速加起來。