0

私のアプリでは、ActiveRecord クエリ間でチェーン可能性を維持したいと考えています。しかし、私はいつもそうできるとは限りません。時々私は選択を使用することを余儀なくされます - これは配列を返し、それによってチェーン可能性を破壊します。

特に、アプリに Response というモデルがあります

応答には、ページと呼ばれるメソッドがありますか? 特定の Response オブジェクトのページ番号 (整数) を返します。

def page?
  ... returns the page number ...      
end

メソッド - ページ? - 実行するには、アプリ内の他のモデルを確認する必要があります。つまり、応答テーブルのデータだけに依存することはできません。

今、私はクエリを持っています - on_page(n) - Response モデルクラスで次のように定義されています

 def self.on_page(n)
   select{ |m| m.page? == n }
 end

問題は、上記の select が ActiveRecord::Relation ではなく配列を返すことです。つまり、次のことはできません (「with_scan」は別の ActiveRecord クエリです)。

Response.on_page(3).with_scan

クエリが実行される順序を変更することで、上記を機能させることができます。しかし、それは単なるハックです

「on_page」クエリで select を使用する代わりの方法はありますか? それとも違う使い方?連鎖可能性を維持できる方法はありますか?

助けてくれてありがとう、アビナフ

4

1 に答える 1

0

連鎖可能性は、ActiveRecord::Relation のインスタンスを操作することによって実現されます。Array のインスタンスを ActiveRecord::Relation に変換するには、.scoped() メソッドを使用します。

def self.on_page(n)
   select{ |m| m.page? == n }.scoped
end

ドキュメントはこちらでご覧いただけます

于 2012-09-16T20:16:35.787 に答える