activerecord ::关系类如何像数组一样?
例如,
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 ::关系,就像数组一样。
如果我创建自己的类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等课程?
因为包括包含模块Enumerable
,因此可以对类进行排序。数组实施的大多数方法都来自该特定模块。因此,如果您想创建一个像数组一样的类,则应实现Enumerable
。
正如您在Active Record中看到的以下代码中看到的那样,您可以注意到何时包含在类中:
https://github.com/rails/rails/blob/master/acterecord/lib/active_record/relation.rb#l15
参考:
- https://ruby-doc.org/core-2.4.1/enumosit.html
- https://ruby-doc.org/core-2.4.1/array.html#class-array-label-literating over arrays