Activerecord ::关系类别如何像数组一样



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

参考:

  1. https://ruby-doc.org/core-2.4.1/enumosit.html
  2. https://ruby-doc.org/core-2.4.1/array.html#class-array-label-literating over arrays

最新更新