在Rails 4

时间:2016-03-16 04:15:47

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我需要以这个页面独有的方式从我的数据库中提取聚合列,跨越多个模型,并且在已经存在性能问题的页面上聚合内存的成本很高。因此,我想对数据库进行手写SQL查询并返回一堆简单对象(如哈希或结构),然后我可以将这些对象发送到使用此信息的现有对象。 ActiveRecord::Base.connection.select_all非常适合我的想法。

我的SQL字符串采用了一系列ID:

WHERE entry.task_id IN (#{@project.tasks.id})

但这不起作用,因为它返回一个包装数组,而connection.quote由于某种原因返回项目符号列表。什么是获得我想要的信息的最佳方式?我应该手动剥离[]吗?有没有像sanitize_sql_array那样方便易用的功能?我是不是应该将select_all称为正常操作的一部分?

过去这似乎更容易,但我使用的大多数方法都受到保护(包括sanitize_sql_array)。 Rails 真的希望我使用ActiveRecord查询方法,似乎。

1 个答案:

答案 0 :(得分:1)

加入并使数组成为一个字符串,然后将其传递给SQL:

ids_string = ids.join(', ')