Внедрить элементы данных в объект - PullRequest
0 голосов
/ 01 октября 2008

Этот вопрос основан на другом моем вопросе (с благодарностью ответил).

Так что, если в модели у меня есть это:

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

Как мне ввести полное имя в объекте person, чтобы в моем контроллере / представлении я мог получить к нему доступ по person.complete_name?

Спасибо за ваше время,
Silviu

Ответы [ 4 ]

6 голосов
/ 01 октября 2008

Я думаю, что лучший способ сделать это - создать атрибут complete_name в вашем классе Person:

def complete_name
  firstname + ', ' + lastname
end
2 голосов
/ 02 октября 2008

Если вы собираетесь перебирать много записей, использование интерполированной строки будет более эффективным с точки зрения памяти.

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

Использование String#+ для объединения строк создает объекты String на каждом шаге. Другими словами, если firstname равно 'John' и lastname равно 'Doe', то каждая из этих строк будет существовать в памяти и в какой-то момент ее необходимо будет собрать в мусор: 'John', 'Doe', 'John, ' и, наконец, 'John, Doe'. Не говоря уже о том, что есть три вызова метода вместо одной строковой интерполяции, которая более эффективно реализована в C.

Если вы используете нотацию #{}, тогда вы избегаете создания строки 'John, '. Не имеет значения при работе с одной или двумя записями, но в больших наборах данных, используемых во всех видах методов, он может быстро сложиться.

1 голос
/ 01 октября 2008

Также еще одно быстрое примечание. Вам не нужно это возвращаемое утверждение в Ruby. Последний оператор в вашем методе будет возвращен.

1 голос
/ 01 октября 2008

Вы можете определить:

attr_accessor :complete_name

в модели человека, а затем просто сделайте person.complete_name= person.firstname + ', ' + person.lastname

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...