2013-10-09 2 views
0

네, 권장하지는 않지만 컨트롤러에서 원시 SQL을하고 싶습니다. 어떻게 수행되는지보십시오.Rails 컨트롤러에서 원시 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 시도했지만 연결 인스턴스 메서드를 상수보다는 것 같다. 분명히 현재 트랜잭션을위한 올바른 연결 개체가 필요합니다.

어떻게받을 수 있습니까? 루비 문서는 다소 위압적입니다. 액티브 :: Base.connection

을 ...하지만 나는 누군가가 그것에 나를 이길 참조 -

답변

1
ActiveRecord::Base.connection.execute('select * from dual') 
0

특정 모델을 찾는 경우에도이 작업을 수행 할 수 있습니다. 당신은 당신이를 통해 액티브 데이터베이스 드라이버의 직접적인 인스턴스에 액세스 할 수있는 특정 모델, 액티브 :: 자료에 매핑 할 수없는 경우

Client.find_by_sql("SELECT * FROM clients") 

Client.all 

같은를 반환합니다. 연결

가능한 방법에 대한 구체적인 문서는 http://apidock.com/rails/ActiveRecord/Base/connection을 참조하십시오.

, 이것은 일반적으로 레일의 내부에 유용하지 않습니다 u는 또 다른 옵션은 직접 Mysql2 보석을 활용하는 것입니다 .Execute를

사용할 수있는 간단한 원시 SQL 호출을 할 수 있지만, 당신에게 옵션을 제공하려는, 이것은 당신이 사용하는 가정 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 
관련 문제