2009-07-29 63 views
0

我有一个方法“搜索”在我的模型,这取决于传递的各种参数运行一个SQL查询,其中我加入七个表。但是当我用另一个命名作用域使用此方法时,则会显示错误“未定义的数组方法调用”。问题使用SQL而不是命名范围在轨道上

但是当代替这种搜索方法,如果我使用命名范围组,然后它工作正常。 因此如何将命名范围与该方法集成

+1

如果你显示一些代码,它会有所帮助 – ErsatzRyan 2009-07-29 12:32:51

回答

0

如果没有看到代码,有点难以确定。但是,这听起来像搜索方法是打算在Model类上调用,并且当您链接named_scope调用时,他们不知道如何处理搜索方法提供的数组,或者搜索方法不知道该怎么办用名称范围提供的记录阵列。

0

我认为你的#search方法可能会返回一些东西(Array?),它没有实现named_scope期望的某种方法。从快速查看activerecord/lib/active_record/named_scope.rb看起来,named_scope返回一个Scope对象,该对象确实实现了#call(以及其他一些非数组方法)。这看起来是链接范围工作的原因。所以一个Array不会工作。

您能否将您的#search方法改为named_scope?我意识到你会得到一个异常(至少对我来说)复杂的定义,但你应该能够将结果与其他范围链接起来。

或者,如何使您的自定义搜索方法的工作,以便它返回(并且还必须采取,为了链接前后工作)范围?虽然可能比一个大的named_scope更容易做。

0

哎对不起回复迟了,但找到了答案 我已经将查询存储在一个变量,然后传递给命名范围,我做find_by_sql。 因此得到了期望的结果。