0

是的,我知道它不被推荐,但我想在控制器中执行原始 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 文档有点令人生畏。

4

3 回答 3

1
ActiveRecord::Base.connection.execute('select * from dual')
于 2013-10-09T01:48:50.070 回答
0

找到它 - ActiveRecord::Base.connection

...但我看到有人打败了我。塔。

于 2013-10-09T01:51:28.460 回答
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
于 2013-10-09T01:56:34.907 回答