Rails 3.1:如何根据方法的结果进行查询?

时间:2012-04-18 12:04:33

标签: activerecord ruby-on-rails-3.1

在我的应用中,我希望在ActiveRecord查询中保持可链接性。但 我并不总能这样做。有时我被迫使用select - 它返回一个数组 从而破坏了可链接性。

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

Response有一个名为page的方法吗?返回页码 - 整数 - 表示 特定的Response对象

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

方法 - 页面? - 需要查看应用程序中的其他模型才能执行。 换句话说,它不能仅仅依赖于“响应表”中的数据

现在,我有一个查询 - on_page(n) - 在Response模型类

中定义如下
 def self.on_page(n)
   select{ |m| m.page? == n }
 end

问题是上面的select返回一个Array而不是一个ActiveRecord :: Relation。 这意味着我无法执行以下操作('with_scan'是另一个ActiveRecord查询)

Response.on_page(3).with_scan

我可以通过更改查询的顺序来完成上述工作。但那只是一个黑客

是否有在'on_page'查询中使用select的替代方法?或者使用它的另一种方式?可以保持可连接性的任何方式?

先谢谢你的帮助, 阿比纳夫

1 个答案:

答案 0 :(得分:0)

可链接性是通过使用ActiveRecord :: Relation的实例来完成的。要将Array的实例转换为ActiveRecord :: Relation,请使用.scoped()方法:

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

您可以查看文档here