Ruby on rails 6 如何访问Rails中的计算字段?

Ruby on rails 6 如何访问Rails中的计算字段?,ruby-on-rails-6,Ruby On Rails 6,在我第一次尝试用RubyonRails开发东西时:)。。。我有一个名字列表存储在字段“first_name”和“last_name”中。在我的个人模型中,我定义了如下内容: def sort_name sort_name = last_name + ',' + first_name end 现在,我想显示列表中显示的所有人员,按sort_名称排序,但是(在我的控制器中)类似于 @persons = Person.order(:sort_name) 不工作(“order子句”中的未知列“so

在我第一次尝试用RubyonRails开发东西时:)。。。我有一个名字列表存储在字段“first_name”和“last_name”中。在我的个人模型中,我定义了如下内容:

def sort_name
 sort_name = last_name + ',' + first_name
end
现在,我想显示列表中显示的所有人员,按sort_名称排序,但是(在我的控制器中)类似于

@persons = Person.order(:sort_name)
不工作(“order子句”中的未知列“sort\u name”)。如何在我的控制器中引用计算字段排序_名称?
我相信这是一个“哦,我的上帝,我真是愚蠢的时刻”,但我很高兴听到任何建议

如果模特有字段名、first_lastname和second_lastname,您可以执行下一步操作:

Person.order(:name,:first\u lastname,:second\u lastname)
默认情况下,以升序方式排序。此外,如果您希望每个字段采用升序或降序方式,也可以放置:

Person.order(name::asc,first\u lastname::desc,second\u lastname::asc)
另外,如果要添加具有完整名称的列,可以使用select,使用postgresql,代码如下:

people=Person.order(
名称::asc,第一个姓氏::desc,第二个姓氏::asc
).选择(
*,concat(名称,,,first_lastname,,,second_lastname)作为排序名称
)
人员[0]。对名称进行排序
#sort_名称可以是例如“Adán Saucedo Salas”

谢谢Andres,我已经做到了,但不幸的是,从长远来看,它将无法发挥作用,因为“排序名称”方法(“计算字段”)将演变成更复杂的东西。这就是全部的想法-创建一个计算字段,我以后可以访问它。有趣的是,它确实有效。G当我简单地把它显示为e。G实例变量@arbitral_person.sort_name的一部分。。。因此,问题实际上是如何将其作为order方法的一部分进行访问。我在回答中添加了另一种情况,在这种情况下,您可以使用select来获取包含计算字段OK的列-我理解该代码。但这是否意味着在人员模型中添加“sort_name”方法实际上没有任何用途?不,它不起作用,方法顺序接收哈希或字符串,哈希/字符串必须遵循特定规则。当您尝试将一个方法sort_名称放在方法顺序之前调用它时,那么方法*sort_名称将返回一个字符串,而该字符串不遵循顺序规则。方法顺序仅与人一起对集合进行排序,而不创建特定字段。谢谢。知道这一点很有帮助。我将设法找到有关您提到的规则的文档。