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が含まれているため、クラスのソートが可能です。配列が実装するメソッドのほとんどは、その特定のモジュールから来ました。したがって、配列のように動作するクラスを作成する場合は、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
関連する問題