【问题标题】:Ruby, iterate objects array in the right orderRuby,以正确的顺序迭代对象数组
【发布时间】:2014-02-23 06:41:53
【问题描述】:

我有一个对象数组,每个对象都响应“order”方法。

我可以写方法

objects = Objects.all
objects.each do |i|
 puts i.order
end

但我不确定顺序是否正确。有没有什么快速的方法可以按照每个对象的正确顺序迭代我的数组?

更新:真实案例。

class Articles < ActiveRecord::Base
 as_many :article_pages
end

a = Article.find(2345)
pages = a.article_pages
pages.each ...
pages.first.order = 1
pages.last.order = 5

我需要按照顺序在我的页面中迭代...

a.article_pages.order('order').each

没用

【问题讨论】:

  • 我的对象按顺序保存在数据库中。所以如果我调用 object.order 我会得到 1,2,3,4,5 等。我需要迭代遵循这个顺序。
  • 这是一个 Rails 问题吗?
  • 不,我正在使用带有 ActiveRecord 的 Sinatra

标签: ruby activerecord sinatra sinatra-activerecord


【解决方案1】:

默认情况下,ActiveRecord 不保证任何顺序。要更改它,请使用:

a = Article.find(2345)
pages = a.article_pages.order('order asc')

按列排序。切换ascdesc 以降序排列。

【讨论】:

  • 更新的解决方案。下次粘贴您实际尝试过的代码,而不是事后更改它。
  • 您确定“默认情况下,ActiveRecord 将按主键升序排序。”?如果没有 ORDER BY 发送到数据库,那么您通常会以 PK 顺序将它们取回,但除非您为数据库提供明确的 ORDER BY 子句,否则不能保证特定的顺序。
  • 已编辑。很好,它是决定默认排序顺序的底层数据库。
【解决方案2】:

您可以使用排序选项,以防您只想升序

a = Article.find(2345)
pages = a.article_pages.all.sort_by &:order

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 2013-07-05
    • 2013-12-25
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多