ActiveRecord へのクエリは常に ActiveRecord::Relations を返します。そうすることで、基本的にクエリの遅延読み込みが可能になります。これがクールな理由を理解するには、次のことを考慮してください。
User.where(manager: 0).where(team_id: team_id).first
この場合、マネージャーではないすべてのユーザーを取得し、チーム ID が team_id のチームに属しているマネージャー以外のすべてのユーザーを取得してから、最初のユーザーを選択します。このコードを実行すると、次のようなクエリが得られます。
SELECT * FROM users WHERE manager = 0 AND team_id = X LIMIT 1
ご覧のとおり、コード内で複数のクエリが作成されていましたが、ActiveRecord はそれらすべてを 1 つのクエリにまとめることができました。これはリレーションを通じて行われます。実際のオブジェクトが必要になると (つまり、最初に呼び出したとき)、ActiveRecord は DB にアクセスしてレコードを取得します。これにより、不要なクエリが防止されます。ActiveRecord は、クエリされたオブジェクトの代わりに関係を返すため、これを行うことができます。Relation クラスを考える最良の方法は、配列のすべてのメソッドを持つ ActiveRecord のインスタンスであるということです。リレーションに対してクエリを呼び出すことができますが、リレーションを反復することもできます。
それが明確でない場合は申し訳ありません。
ああ、あなたの問題を解決するために。%td = is_manager(team).to_a
これにより、Relation オブジェクトがユーザーの配列に変換されます。