Activerecord Rails 3.1:如何基于方法的结果进行查询?

Activerecord Rails 3.1:如何基于方法的结果进行查询?,activerecord,ruby-on-rails-3.1,Activerecord,Ruby On Rails 3.1,在我的应用程序中,我希望保持ActiveRecord查询之间的链接能力。但是 我并非总能做到这一点。有时我被迫使用select,它返回一个数组 从而破坏了可链接性 特别是,我的应用程序中有一个名为Response的模型 响应有一个名为page的方法?它返回的页码是一个整数 特定的响应对象 def page? ... returns the page number ... end 方法-page?-需要查看应用程序中的其他一些型号才能执行。 换言之,它不能仅仅依赖响应表中的数据

在我的应用程序中,我希望保持ActiveRecord查询之间的链接能力。但是 我并非总能做到这一点。有时我被迫使用select,它返回一个数组 从而破坏了可链接性

特别是,我的应用程序中有一个名为Response的模型

响应有一个名为page的方法?它返回的页码是一个整数 特定的响应对象

def page?
  ... returns the page number ...      
end
方法-page?-需要查看应用程序中的其他一些型号才能执行。 换言之,它不能仅仅依赖响应表中的数据

现在,我在响应模型类中定义了一个查询(on_pagen),如下所示

 def self.on_page(n)
   select{ |m| m.page? == n }
 end
问题是上面的选择返回一个数组,而不是ActiveRecord::Relation。 这意味着我无法执行以下“with_scan”是另一个ActiveRecord查询

Response.on_page(3).with_scan
我可以通过改变查询的顺序来实现上述功能。但这只是一个黑客

在“on_page”查询中是否有使用select的替代方法?还是另一种使用它的方式?是否有任何方式可以保持可链接性

提前感谢您的帮助,
Abhinav

可链接性是通过使用ActiveRecord::Relation的实例来实现的。要将数组实例转换为ActiveRecord::Relation,请使用.scoped方法:

def self.on_page(n)
   select{ |m| m.page? == n }.scoped
end
您可以查看文档