将数据成员注入到对象

时间:2020-03-06 14:59:05  来源:igfitidea点击:

这个问题是基于我的另一个问题(感谢回答)。

所以如果在模型中我有这个:

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

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

感谢时间,
西尔维

解决方案

我们可以定义:

attr_accessor :complete_name

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

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

def complete_name
  firstname + ', ' + lastname
end

另外,另一个快速说明。我们不需要在Ruby中使用该return语句。方法中的最后一条语句将被返回。

如果要遍历大量记录,则使用插值字符串将更节省内存。

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

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

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