2017-06-08 6 views
0

。私はサイト名を返す私のサーバに関数getactivesites()を持っています。ルビーグレープPOSTGRESQLストアドプロシージャ

サーバコード:

BEGIN 

    RETURN QUERY SELECT "SITE_ID", 
      "SITE_NAME" 
     FROM public.sites WHERE "ACTIVE_FLAG" = true 
     ORDER BY "SITE_NAME" ASC ; 
    END; 

Rubyコード:

resource :getsites do 

desc “Get Active Sites“ 
get do 
    results = ActiveRecord::Base.connection.execute("execute getactivesites") 
    return results 
end 

私はそれを実行したときに私が手にエラーがある「PG :: InvalidSqlStatementName:ERROR:プリペアドステートメント "getactivesites" は存在しません:実行getactivesites」

+0

は 'getactivesites'手続きの仕事をしていますか? –

+0

たとえば、開発データベースには定義されているが、テストデータベースには定義されていないプロシージャがありますか? (複数のデータベースをお持ちの場合... ...) –

+0

はい、getactivesitesは私のpostgres dbを実行すると動作します。私は開発データベースにそれを持っていて、同じデータベース上のRuby on Railsプロジェクトを実行します。 – Swish2121

答えて

2

executeの代わりにselectをお試しください:

ここ
ActiveRecord::Base.connection.execute("select getactivesites()") 

は私の本当のPROJからです:

Dbはのような糖である
Db.execute('select my_sp_name(?)', my_sp_param) 

:あなたはPostgresのコンソールで直接実行する場合

# -*- frozen-string-literal: true -*- 
# Syntax sugar module 
module Db 
    extend self 

    delegate :transaction, to: ApplicationRecord 

    def sanitize(*args) 
    ApplicationRecord.send(:sanitize_sql, args) 
    end 

    def execute(*args) 
    ApplicationRecord.connection.execute(sanitize(*args)) 
    end 

end 
+0

からの情報を返すという同じファイル内の任意のブドウのコール[砂糖](https://en.wikipedia.org/wiki/Syntactic_sugar) –

+0

はい、ありがとう!一定。 –

+0

完璧に働いて、ありがとう! – Swish2121

関連する問題