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