Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为完整形式名称定义类方法_Ruby On Rails_Ruby - Fatal编程技术网

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
的属性

在my
user.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
列?