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
对项目的所有短语进行排序
如果需要,您可以执行此操作,默认情况下应订购关联
我想显示项目的阶段列表。为此,我在控制器中加载所有阶段
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
对项目的所有短语进行排序如果需要,您可以执行此操作,默认情况下应订购关联