Мне нужно написать автономный скрипт Ruby, который должен иметь дело с базой данных. Я использовал приведенный ниже код в рельсах 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
но получаю ошибку: -
`<main>': undefined method `execute' for #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000002867548> (NoMethodError)
что мне здесь не хватает?
РЕШЕНИЕ
Получив решение от denis-bu, я использовал его следующим образом, и это тоже сработало.
@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
источник
источник
connection.execute
а неconnection().execute
источник
ActiveRecord::Base.connection.execute("SQL query")
ActiveRecord::Base.connection_pool.checkin(connection)
потокамиЯ бы рекомендовал использовать
ActiveRecord::Base.connection.exec_query
вместоActiveRecord::Base.connection.execute
which возвращаетActiveRecord::Result
(доступно в рельсах 3.1+), с которым немного легче работать.Тогда вы можете получить доступ к нему в различном результате различных способов , как
.rows
,.each
или.to_hash
Из документов :
примечание: скопировал мой ответ отсюда
источник
Вы также можете использовать find_by_sql
источник
Как насчет этого :
У вас должен быть установлен гем TinyTds, так как вы не указали его в своем вопросе, я не использовал Active Record
источник