我尝试在我的User
模型中定义一个名为full_name
的类方法,该方法显示用户的全名,包括其标题。
我有两个模型:User
和Profile
。 User
有一个profile
,profile
属于user
。
User
存储名为first_name
和last_name
的属性。 Profile
存储名为title
的属性。
在我的user.rb
中,我有:
def full_name
self.profile.try(:title)." #{first_name.capitalize} #{last_name.capitalize}"
end
这不起作用。如果我删除了标题位,那么对于名字和姓氏都可以。
如何从Profile
模型(属于User
模型)添加属性,以便显示正式的全名?
答案 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