2016-11-11 7 views
1

「Aws」(Amazon Web Services)SDKバージョン2を使用しています(大文字で「AWS」ではなくSDKバージョン1の名前空間です。 'Aws'バージョン2を使用しています)、名前空間定数 'Aws'はコードのレールコントローラレベルで認識されていますが、同じコントローラで作成されたモデルで「Aws」を使用しようとすると、 'Aws'名前空間は不明です。私は定義されていない定数 'Aws'エラーを取得します。Ruby on Rails Aws SDK v2定数 'Aws'モデルで未定義の定数エラー

私は、AwsツールキットはGemfileにgemを組み込むことで初期化されていると仮定しています。そこにはすべて正しいものがあります。バンドルチェックはすべてが解決されたことを示し、私が言ったように、コントローラでは動作しますが、モデルクラスコードでは動作しません。

私はモデルにAws SDKを注入することでこれを回避していますが、これは正しい方法だとは思わない、多分それは??? RubyとRailsの新機能ですので、アドバイスやセットアップを手伝って、Awsツールキットが世界中で知られているように助けてもらえると助かります。

ありがとうございます!

+0

全体のエラートレースを投稿できます。 Aws gemには、レール起動時に必要なファイルがすべて含まれているので、モデルで動作するはずです。 – Sivalingam

+0

私は痕跡が残っていません。コントローラーがオブジェクトを初期化すると、コントローラー内のAwsとその下の1つのクラスの深さを確認できます。そのクラスが別のオブジェクトを初期化すると、次の深さでAWSまたはAwsを見ることができません。:: Awsまたは:: Awsでスコープしない限り私はコントローラーの下に2の深さで見ることができます。これは正常ですか、どこかに書かれていますか? –

+0

ああ、私はバンドルを最近走らせたので、前に述べたように固定されたものをコントローラの下にAwsやAWSの1つの深さで見ることができなかったかどうかはわからないので、物事は固定で正常です。モジュールの範囲ありがとう! –

答えて

0

答えは、スコープ演算子を通常使用する必要があるということでした。新しいRubyの利用者として、私はグローバルに使用されていない定数に慣れていなかったので、スコープオペレータが必要だった理由の説明は多少これらの参照によって説明される:「」

https://www.tutorialspoint.com/ruby/ruby_operators.htm

Rubyのドット二重コロン "::"演算子: モジュール名とピリオドを名前の前に付けてモジュールメソッドを呼び出し、モジュール名と2つのコロンを使用して定数を参照します。

::は、クラスまたはモジュール内で定義された定数、インスタンスメソッド、およびクラスメソッドに、クラスまたはモジュールの外部のどこからでもアクセスできる単項演算子です。

注意:Rubyでは、クラスとメソッドも定数と見なされる可能性があります。

:: Const_nameの前に、適切なクラスまたはモジュールオブジェクトを返す式を付ける必要があります。

プレフィックス式を使用しない場合は、デフォルトでメインObjectクラスが使用されます。

関連する問題