0

我的模型中有一个“搜索”方法,它根据传递的各种参数运行一个 sql 查询,我将在其中加入七个表。但是当我将此方法与另一个命名范围一起使用时,会显示错误“数组的未定义方法调用”。

但是,如果我使用命名范围组而不是这种搜索方法,那么它可以正常工作。那么如何将命名范围与该方法集成

4

3 回答 3

0

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

于 2009-07-29T07:06:37.183 回答
0

我认为您的#search方法可能返回的东西(一个Array?)没有实现某些named_scope预期的方法。快速查看activerecord/lib/active_record/named_scope.rb它似乎named_scope返回了一个Scope对象,该对象确实实现#call了(以及一堆其他非数组方法)。这似乎就是链接作用域起作用的原因。所以一个数组是行不通的。

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

或者,如何让您的自定义搜索方法工作,以便它返回(并且还必须采用,在工作之前和之后进行链接)一个范围?可能比一个大的 named_scope 更难做。

于 2009-07-29T07:52:00.290 回答
0

嘿抱歉回复晚了,但找到了答案,我已将查询存储在一个变量中,然后传递到我执行 find_by_sql 的命名范围。因此得到了想要的结果。

于 2009-08-25T05:02:10.417 回答