正确使用ActiveRecord :: Base.connection的方法

时间:2015-02-26 09:17:34

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

因为我在我的应用程序中更改内容所以经常我决定使用ActiveRecord::Base.connection来查询我的数据库,这很方便,因为我不需要添加关系,也因为查询更快更容易写。

但是使用正确的方法是什么:

ActiveRecord::Base.connection.select_all
ActiveRecord::Base.connection.execute
and other methods.

作为一个例子:我如何查询我的users表。

ActiveRecord::Base.connection.select_all("SELECT * FROM users WHERE username = '#{username}'").rows
ActiveRecord::Base.connection.close()

使用上面的示例ActiveRecord::Base.connection.close()知道要关闭的连接是什么? (在这种情况下,我想关闭select_all)

或者我应该使用? (如果我将所有数据转换为数组或json,则在任何模型上都有此查询将返回查询中的任何内容)

query = "SELECT * FROM users WHERE username = ?"
Model.find_by_sql([query, username])

1 个答案:

答案 0 :(得分:1)

您可以更好地使用Connection Pool

spec1 = database_a
ActiveRecord::ConnectionPool.open(spec1) do |conn|
   conn.select_all("SELECT * FROM users WHERE username = '#{username}'").rows
   conn.close
end

spec2 = database_b
ActiveRecord::ConnectionPool.open(spec2) do |conn|
   conn.select_all("SELECT * FROM users WHERE username = '#{username}'").rows
   conn.close
end