【问题标题】:rails - get all elements order by an attributerails - 按属性获取所有元素的顺序
【发布时间】:2015-10-09 09:35:55
【问题描述】:

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

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

然后我使用haml中的每个函数遍历@phases

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

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

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

我想通过称为“位置”的阶段属性来订购此请求。是否可以添加订单选项?

【问题讨论】:

    标签: ruby-on-rails controller haml


    【解决方案1】:

    项目.rb

    has_many :phrases, order: 'phrases.column_name'
    

    因此,这将使用您指定的 column_name 对项目的所有短语进行排序

    如果您愿意,您可以这样做,默认情况下应订购关联

    【讨论】:

    【解决方案2】:

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

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

    或者

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

    【讨论】:

    • 感谢语法,但我将使用@test 模型的编辑,所以我不需要每次都考虑添加订单:)
    【解决方案3】:

    试试这个

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

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

    scope :ordered, order: "position ASC"
    

    然后这样称呼

    @phases = @project.phases.ordered
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2012-03-06
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多