Ruby on rails 为完整形式名称定义类方法
我试图在我的Ruby on rails 为完整形式名称定义类方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图在我的User模型中定义一个名为full\u name的类方法,它显示用户的全名,包括他们的标题 我有两种型号:User和Profile用户有一个配置文件,配置文件属于用户 User存储名为first\u name和last\u name的属性。Profile存储一个名为title的属性 在myuser.rb中,我有: def full_name self.profile.try(:title)." #{first_name.capitalize} #{last_name.capita
User
模型中定义一个名为full\u name
的类方法,它显示用户的全名,包括他们的标题
我有两种型号:User
和Profile
<代码>用户有一个配置文件
,配置文件
属于用户
User
存储名为first\u name
和last\u name
的属性。Profile
存储一个名为title
的属性
在myuser.rb
中,我有:
def full_name
self.profile.try(:title)." #{first_name.capitalize} #{last_name.capitalize}"
end
这不管用。如果我删除了标题,名字和姓氏都可以
如何从
概要文件
模型(属于用户
模型)中添加一个属性,以便显示正式的全名?
在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,则不会将其添加到数组中。这样,当您在每个字段之间放置空格时,如果没有标题,您将不会在前面获得空格。如果您正确设置关联,
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
你说它不起作用是什么意思
self.profile.try(:title)
应该为您提供用户配置文件的标题。你得到了什么?你是否正确地建立了协会?您的profiles
表是否有user\u id
列?