J'ai besoin d'écrire un script ruby autonome qui est censé traiter la base de données. J'ai utilisé le code donné ci-dessous dans les 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
mais obtenir une erreur: -
`<main>': undefined method `execute' for #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000002867548> (NoMethodError)
ce qui me manque ici?
SOLUTION
Après avoir obtenu la solution de denis-bu, je l'ai utilisée de la manière suivante et cela a également fonctionné.
@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
la source
la source
connection.execute
plutôt queconnection().execute
la source
ActiveRecord::Base.connection.execute("SQL query")
ActiveRecord::Base.connection_pool.checkin(connection)
apidock.com/rails/ActiveRecord/ConnectionAdapters/…Je recommanderais d'utiliser
ActiveRecord::Base.connection.exec_query
au lieu deActiveRecord::Base.connection.execute
qui renvoie unActiveRecord::Result
(disponible dans les rails 3.1+) qui est un peu plus facile à utiliser .Ensuite , vous pouvez y accéder à divers le résultat de diverses manières comme
.rows
,.each
ou.to_hash
À partir de la documentation :
note: copié ma réponse d' ici
la source
Vous pouvez également utiliser find_by_sql
la source
Que dis-tu de ça :
Vous devez avoir installé TinyTds gem, puisque vous ne l'avez pas spécifié dans votre question, je n'ai pas utilisé Active Record
la source