在rails中使用sql而不是命名范围的问题

时间:2009-07-29 06:21:53

标签: ruby-on-rails ruby named-scope

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

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

3 个答案:

答案 0 :(得分:0)

如果没有看到代码,确实有点难以说清楚。但听起来似乎是要在Model类上调用搜索方法,当你链接named_scope调用时,他们不知道如何处理搜索方法提供的数组,或者你的搜索方法不知道该怎么做使用名称范围提供的记录数组。

答案 1 :(得分:0)

我认为您的#search方法可能会返回某些内容(Array?),而这些方法并未实现named_scope期望的某种方法。从快速查看activerecord/lib/active_record/named_scope.rbnamed_scope似乎返回Scope对象,它实现了#call(以及一堆其他非数组方法)。这看起来是链接范围有效的原因。因此,数组不会起作用。

您可以将#search方法修改为named_scope吗?我意识到你会得到一个不寻常的(至少对我而言)复杂的定义,但是你应该能够将你的结果与其他范围联系起来。

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

答案 2 :(得分:0)

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