是的,我知道它不是推荐的,但我想在控制器中进行原始SQL,看看它是如何完成的。
class FooController < ApplicationController
def foo
boz = 'd'
connection.select_rows('select * from dual').each do |r|
boz = r[0]
end
[boz: boz]
end
end
然后我的观点将有希望呈现'boz is“X”!'。
当然,由于未定义连接,因此失败。我尝试过ActiveRecord :: connection,但连接似乎是一个实例方法而不是常量。显然,我需要正确的连接对象用于当前事务。
如何获得它? ruby文档有点令人生畏。
答案 0 :(得分:1)
ActiveRecord::Base.connection.execute('select * from dual')
答案 1 :(得分:0)
找到它 - ActiveRecord :: Base.connection
......但我看到有人打败了我。 TA
答案 2 :(得分:0)
如果您正在寻找特定型号,也可以这样做。
Client.find_by_sql("SELECT * FROM clients")
将返回与
相同的内容Client.all
如果您不希望它映射到特定模型,您可以通过ActiveRecord :: Base.connection访问ActiveRecord数据库驱动程序的直接实例
有关可能方法的具体文档,请参阅http://apidock.com/rails/ActiveRecord/Base/connection。
要做一个简单的原始SQL调用你可以使用.execute
另一种选择是直接利用Mysql2 gem,这通常在rails中没用,但是想给你选项,这假设你使用的是mysql,但是其他的适配器也可以直接使用。
client = Mysql2::Client.new(YAML.load(File.read(Rails.root.join(*%w[config database.yml])))[Rails.env])
results = client.query("SELECT * FROM clients")
results.each(:symbolize_keys => true) do |row|
# Do something with a row
end