将数据成员注入到对象

问题描述:

此问题是基于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

我认为要做到这一点的最好办法是在Person类中创建完整名称属性:

def complete_name 
    firstname + ', ' + lastname 
end 

您可以定义:

attr_accessor :complete_name 

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

+0

您的答案对我来说同样适用,但我发现IDBD的解决方案更加优雅 – 2008-10-01 17:25:08

另外,另一个快速笔记。你不需要Ruby中的那个return语句。您的方法中的最后一个语句将被返回。

如果您打算迭代大量记录,那么使用插值字符串将会提高内存效率。

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

使用String#+连接字符串会在每个步骤创建String对象。换句话说,如果firstname'John'lastname'Doe',然后这些字符串将存在于内存中,需要进行垃圾收集的一些点:'John''Doe''John, ',最后'John, Doe'。更不用说,有三个方法调用,而不是一个字符串插值,它可以在C中更高效地实现。

如果使用#{}表示法,则可以避免创建'John, '字符串。在处理一个或两个记录时无关紧要,但是在使用各种方法使用的大型数据集中,它们可以快速加起来。