2017-05-05 13 views
-1

ActiveRecord :: Relation類如何像數組一樣操作?ActiveRecord :: Relation類如何像Array一樣操作?

例如,

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 ::關係?

+0

哦,問題不是關於h使用AR,我在問如何製作像ActiveRecord :: Relation這樣的子類,它就像數組一樣。 –

+0

「數組」的含義是什麼意思? –

+0

在_AR_中,您可以使用'User.all [0]'。在我的例子'MyClass.new([1,2,3])。relation [0]'。如何讓我可以使用'MyClass.new([1,2,3])[0]''的類? –

回答

1

因爲包含模塊Enumerable,它使類能夠被排序。 Arrays實現的大多數方法都來自該特定模塊。所以如果你想創建一個類似Array的類,你應該實現Enumerable

正如你從活動記錄下面的代碼看,你可以看到,當它在類包括:

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
相關問題