在Controller中排序数组

doe*_*che 2 ruby ruby-on-rails

您好我想在Rails控制器中对数组进行排序.我想在我在View中循环它之前对数组进行排序

@projects = Project.all.sort #throws error
#and
@projects = Project.all
@projects.sort               # throws error
Run Code Online (Sandbox Code Playgroud)

抛出此错误:未定义的方法<=>,#<Project:0x101f70b28> 但当我查询时:

@projects.respond_to?('sort')
Run Code Online (Sandbox Code Playgroud)

我明白了

我该如何对数组进行排序?应该在视图中还是在控制器中完成?任何帮助都非常感谢!

Tru*_*oft 15

Ruby不知道如何对项目进行排序.您必须指定要用于排序的字段.示例created_at:

@projects = Project.all.sort { |p1, p2| p1.created_at <=> p2.created_at }
Run Code Online (Sandbox Code Playgroud)

要么

@projects = Project.all.sort_by &:created_at
Run Code Online (Sandbox Code Playgroud)

或者,您可以在数据库级别对它们进行排序:

@projects = Project.find(:all, :order => 'created_at')
Run Code Online (Sandbox Code Playgroud)