ActiveRecord :: Relation类如何像Array一样?

时间:2017-05-05 16:50:59

标签: ruby-on-rails arrays ruby activerecord

ActiveRecord :: Relation类如何像数组一样工作?

例如,

User.all
=> #<ActiveRecord::Relation [#<User id: 1, name: "Alex", nickname: "leha", created_at: "2017-05-05 12:36:31", updated_at: "2017-05-05 12:36:31">]>   

它返回ActiveRecord :: Relation,其作用类似于Array。

如果我创建自己的课程MyClass

class MyClass
  attr_accessor :relation
  def initialize(options)
    @relation = options
  end
end

m = MyClass.new [1,2,3]
=> #<MyClass:0x007ffa3f9ab730 @relation=[1, 2, 3]>

问题是如何使类像ActiveRecord :: Relation?

1 个答案:

答案 0 :(得分:1)

因为包含模块Enumerable,因此可以对类进行排序。 Arrays实现的大多数方法都来自该特定模块。因此,如果您想创建一个类似于Array的类,您应该实现Enumerable

正如您在Active Record中的以下代码中所看到的,您可以注意到它何时包含在类中:

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/relation.rb#L15

参考文献:

  1. https://ruby-doc.org/core-2.4.1/Enumerable.html
  2. https://ruby-doc.org/core-2.4.1/Array.html#class-Array-label-Iterating+over+Arrays