将数据成员注入对象

时间:2008-10-01 16:24:02

标签: ruby-on-rails ruby oop

此问题基于another question of mine(谢天谢地回答)。

因此,如果在模型中我有这个:

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

如何在person对象中注入完整名称,以便在我的控制器/视图中我可以通过person.complete_name访问它?

感谢您的时间,
西尔维乌

4 个答案:

答案 0 :(得分:6)

我认为最好的方法是在Person类中创建complete_name属性:

def complete_name
  firstname + ', ' + lastname
end

答案 1 :(得分:2)

如果你要迭代很多记录,那么使用插值字符串将会提高内存效率。

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

使用String#+连接字符串会在每一步创建String对象。换句话说,如果firstname'John'lastname'Doe',那么这些字符串中的每一个都将存在于内存中,需要在某些时候进行垃圾回收:{ {1}},'John''Doe',最后是'John, '。更不用说有三种方法调用而不是一种字符串插值,这在C语言中更有效地实现。

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

答案 2 :(得分:1)

您可以定义:

attr_accessor :complete_name

在人物模型中然后执行person.complete_name= person.firstname + ', ' + person.lastname

答案 3 :(得分:1)

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