我有一个方法“搜索”在我的模型,这取决于传递的各种参数运行一个SQL查询,其中我加入七个表。但是当我用另一个命名作用域使用此方法时,则会显示错误“未定义的数组方法调用”。问题使用SQL而不是命名范围在轨道上
但是当代替这种搜索方法,如果我使用命名范围组,然后它工作正常。 因此如何将命名范围与该方法集成
我有一个方法“搜索”在我的模型,这取决于传递的各种参数运行一个SQL查询,其中我加入七个表。但是当我用另一个命名作用域使用此方法时,则会显示错误“未定义的数组方法调用”。问题使用SQL而不是命名范围在轨道上
但是当代替这种搜索方法,如果我使用命名范围组,然后它工作正常。 因此如何将命名范围与该方法集成
如果没有看到代码,有点难以确定。但是,这听起来像搜索方法是打算在Model类上调用,并且当您链接named_scope调用时,他们不知道如何处理搜索方法提供的数组,或者搜索方法不知道该怎么办用名称范围提供的记录阵列。
我认为你的#search
方法可能会返回一些东西(Array
?),它没有实现named_scope
期望的某种方法。从快速查看activerecord/lib/active_record/named_scope.rb
看起来,named_scope
返回一个Scope
对象,该对象确实实现了#call
(以及其他一些非数组方法)。这看起来是链接范围工作的原因。所以一个Array不会工作。
您能否将您的#search
方法改为named_scope
?我意识到你会得到一个异常(至少对我来说)复杂的定义,但你应该能够将结果与其他范围链接起来。
或者,如何使您的自定义搜索方法的工作,以便它返回(并且还必须采取,为了链接前后工作)范围?虽然可能比一个大的named_scope更容易做。
哎对不起回复迟了,但找到了答案 我已经将查询存储在一个变量,然后传递给命名范围,我做find_by_sql。 因此得到了期望的结果。
如果你显示一些代码,它会有所帮助 – ErsatzRyan 2009-07-29 12:32:51