RoR: определение to_s для двух имен / меток

#ruby #activeadmin

#ruby #activeadmin

Вопрос:

Я использую def to_s, чтобы изменить числовое значение пользователя в строке.

У пользователя есть имя и фамилия, хотя — f_name и s_name.

В моей модели:

 def to_s
f_name
end
  

Работает нормально. Но как я могу получить фамилию рядом?? Спасибо

Комментарии:

1. Всегда ли у пользователя есть и имя, и фамилия?

Ответ №1:

Если возможно, что у вас есть только имя или фамилия, тогда рассмотрите:

 def full_name
  [first_name, last_name].compact.join(' ')
end

def to_s
  full_name
end
  

Какой бы метод вы ни использовали, я бы рекомендовал вам создать метод для выражения полного имени, а затем ссылаться на него в методе to_s.

Ответ №2:

Вы можете использовать интерполяцию:

 def to_s
  "#{f_name} {l_name}" # or f_name   ' '   l_name
end
  

Комментарии:

1. Я предпочитаю версию, которая использует интерполяцию строк, потому что версия, которая объединяет строку с завершается ошибкой, когда f_name является nil .

2. @spickermann для меня интерполяция строк всегда выглядела лучше, поэтому 1

Ответ №3:

Самый простой вариант — просто вернуть строку, объединяющую обе части имени:

 def to_s
  "#{f_name} #{s_name}"
end
  

В Ruby последнее значение в методе является подразумеваемым возвращаемым значением. Существуют более явные способы сделать это, а также другие способы объединения строк. Вы также могли бы сделать это:

 def to_s
  return f_name   ' '   s_name
end
  

Комментарии:

1. Спасибо обоим! Оба подхода работают. Большое спасибо 🙂 Не могу поставить галочку в течение нескольких минут!