rails - 获取所有元素按属性排序

rails - get all elements order by an attribute

我想显示项目的阶段列表。为此,我在控制器中加载所有阶段

def load_project
    @project = Project.find params[:id]
    @phases = @project.phases
end

然后我使用 haml 中的每个函数完成@phases

- @phases.each do |phase|
    %tr ...

问题是之前代码的sql请求没有任何order属性,所以它是默认的id排序。

SELECT `phases`.* FROM `phases` WHERE `phases`.`project_id` = 123

我想通过阶段属性调用来订购此请求 "position"。是否可以添加订购选项?

您可以在控制器中添加order,或者在视图中添加

def load_project
    @project = Project.find params[:id]
    @phases = @project.phases.order(:position)
end

或者

- @phases.order(:position).each do |phase|
    %tr ...

试试这个

@phases = @project.phases.order("position ASC")

而是像这样向模型阶段添加范围

scope :ordered, order: "position ASC"

然后这样调用

@phases = @project.phases.ordered

project.rb

has_many :phrases, order: 'phrases.column_name'

所以这将按照您指定的 column_name

对项目的所有短语进行排序

如果需要,您可以执行此操作,默认情况下应订购关联