Procedimentos armazenados e ActiveRecord

Não existe uma maneira fácil de executar um procedimento armazenado. Para isso fiz um pequeno serviço em cima do ActiveRecord que retorna OpenStruct

class StoredProcedureService

def self.instance
@instance ||= StoredProcedureService.new
end

def execute(name, *args)
results
= []
begin
connection
.execute("CALL #{name}(#{args.join(',')})").each(as: :hash, symbolize_keys: true) do |row|
results
<< OpenStruct.new(row)
end
ensure
connection
.close
end
results

end

def connection
ActiveRecord::Base.connection
end
end

Mais fácil de ver em uma essência! https://gist.github.com/3714101