为完整的正式名称定义类方法

时间:2015-10-11 05:49:04

标签: ruby-on-rails ruby

我尝试在我的User模型中定义一个名为full_name的类方法,该方法显示用户的全名,包括其标题。

我有两个模型:UserProfileUser有一个profileprofile属于user

User存储名为first_namelast_name的属性。 Profile存储名为title的属性。

在我的user.rb中,我有:

def full_name
  self.profile.try(:title)." #{first_name.capitalize} #{last_name.capitalize}"
end

这不起作用。如果我删除了标题位,那么对于名字和姓氏都可以。

如何从Profile模型(属于User模型)添加属性,以便显示正式的全名?

2 个答案:

答案 0 :(得分:1)

.不是ruby中的连接,因此您可以执行"#{self.profile.try(:title)} #{first_name.capitalize} #{last_name.capitalize}"。但是,如果没有标题(或配置文件),这可能会在开始时为您提供空间。

试试这个:

def full_name
  [*self.profile.try(:title), first_name.capitalize, last_name.capitalize].join(" ")
end

使用splat运算符,如果title字段为nil,则不会将其添加到数组中。这样,当你在每个字段之间放置空格时,如果没有标题,你就不会在前面获得空格。

答案 1 :(得分:1)

如果您正确设置了关联,self.profile.try(:title)应该会为您提供用户个人资料的标题。

你写的方式,你应该得到一个语法错误:

self.profile.try(:title)." #{first_name.capitalize} #{last_name.capitalize}"

你应该用这种方式编写方法:

 def full_name
    "#{self.profile.try(:title)} #{first_name.capitalize} #{last_name.capitalize}"
 end