Preciso escrever um script ruby autônomo que deve lidar com banco de dados. Eu usei o código fornecido abaixo no rails 3
@connection = ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "localhost",
:database => "siteconfig_development",
:username => "root",
:password => "root123"
)
results = @connection.execute("select * from users")
results.each do |row|
puts row[0]
end
mas obtendo erro: -
`<main>': undefined method `execute' for #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000002867548> (NoMethodError)
o que estou perdendo aqui?
SOLUÇÃO
Depois de obter a solução de denis-bu eu usei da seguinte maneira e funcionou também.
@connection = ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "localhost",
:database => "siteconfig_development",
:username => "root",
:password => "root123"
)
sql = "SELECT * from users"
@result = @connection.connection.execute(sql);
@result.each(:as => :hash) do |row|
puts row["email"]
end
sql
ruby-on-rails
Neeraj
fonte
fonte
connection.execute
ao invés deconnection().execute
fonte
ActiveRecord::Base.connection.execute("SQL query")
ActiveRecord::Base.connection_pool.checkin(connection)
apidock.com/rails/ActiveRecord/ConnectionAdapters/…Eu recomendaria usar em
ActiveRecord::Base.connection.exec_query
vez deActiveRecord::Base.connection.execute
que retorna umActiveRecord::Result
(disponível no rails 3.1+) que é um pouco mais fácil de trabalhar.Em seguida, você pode acessá-lo em vários resultados de várias maneiras
.rows
, como.each
, ou.to_hash
Dos documentos :
nota: copiei minha resposta daqui
fonte
Você também pode usar find_by_sql
fonte
Que tal agora :
Você precisa ter o TinyTds gem instalado, uma vez que você não especificou em sua pergunta Eu não usei o Active Record
fonte