find_by_sql呈现一个数组

我在这里遇到了一些问题,我无法使我的find_by_sql请求呈现ActiveRecord关系。 实际上,我需要一个activerecord关系来提出新的请求:

@searches = @searches.find_by_sql('SELECT *, COUNT( follower_id ) FROM follows GROUP BY followable_id LIMIT 0 , 3') if params[:only_famous_projects] @project_pages = @project_pages.where(:project_id => @searches.pluck(:'followable.id')) if params[:only_famous_projects] 

没有activerecord关系,我不能使用“pluck”。 因此,我认为我必须将我的sql请求转换为Activerecord请求。 但是,只要我在ActiveRecord上使用“count”,我就会遇到一个很大的问题:我最终没有ActiveRecord关系,而是一个FixNum!

我不知道在哪里可以找到答案,如果你能帮助我,我将非常感激。 谢谢

只有在使用YourModel.find_by_sql调用它时, find_by_sql才会返回ActiveRecord对象。

为什么不使用ActiveRecord查询接口。 它在计算方面做得很好。

更新

 @searches = @searches.group(:followable_id).limit(3).offset(0).count(:follower_id) if params[:only_famous_projects] 

请注意,它将为您提供一个包含每个followable_id计数的哈希。

是不是LIMIT 0, 3相当于LIMIT 3

COUNT将始终返回FixNUM,因为您要求数据库计算行数。

你应该尝试使用find_by_sql作为最后的手段,因为它只是为了绕过它无法做的事情而绕过ActiveRecord。 即使对于ActiveRecord不支持的东西,您也可以随时查看是否可以使用Squeel或Valiumgem来处理边缘情况。

不使用find_by_sql另一个原因是,例如,使用MySQL特定术语将阻止您将来使用其他数据库。