我的模型中有一个“搜索”方法,它根据传递的各种参数运行一个 sql 查询,我将在其中加入七个表。但是当我将此方法与另一个命名范围一起使用时,会显示错误“数组的未定义方法调用”。
但是,如果我使用命名范围组而不是这种搜索方法,那么它可以正常工作。那么如何将命名范围与该方法集成
我的模型中有一个“搜索”方法,它根据传递的各种参数运行一个 sql 查询,我将在其中加入七个表。但是当我将此方法与另一个命名范围一起使用时,会显示错误“数组的未定义方法调用”。
但是,如果我使用命名范围组而不是这种搜索方法,那么它可以正常工作。那么如何将命名范围与该方法集成
如果没有看到代码,很难确定。但听起来搜索方法旨在在 Model 类上调用,并且当您链接 named_scope 调用时,他们不知道如何处理您的搜索方法提供的数组,或者您的搜索方法不知道该怎么做使用名称范围提供的记录数组。
我认为您的#search
方法可能返回的东西(一个Array
?)没有实现某些named_scope
预期的方法。快速查看activerecord/lib/active_record/named_scope.rb
它似乎named_scope
返回了一个Scope
对象,该对象确实实现#call
了(以及一堆其他非数组方法)。这似乎就是链接作用域起作用的原因。所以一个数组是行不通的。
你能把你的#search
方法改造成一个named_scope
? 我意识到您将获得一个异常(至少对我而言)复杂的定义,但是您应该能够将您的结果与其他范围链接起来。
或者,如何让您的自定义搜索方法工作,以便它返回(并且还必须采用,在工作之前和之后进行链接)一个范围?可能比一个大的 named_scope 更难做。
嘿抱歉回复晚了,但找到了答案,我已将查询存储在一个变量中,然后传递到我执行 find_by_sql 的命名范围。因此得到了想要的结果。