0

これは次のtopic.gemspecとおりです。

Gem::Specification.new do |s|
  s.name        = 'topic'
  s.version     = '1.0.0'
  s.date        = '2012-12-30'
  s.files   = ["lib/models/topic.rb"]
end

gem はアプリケーション ルートにあります。

Gemfileで:

gem 'topic', :path => '.'

アプリの実行中に、トピック クラスが表示されません。

uninitialized constant ApplicationController::Topic

私は何を間違っていますか?

ありがとう。

4

2 に答える 2

1

bundler が gem を要求していることを確認する必要があります。ファイルが必要ですlib/topic.rb。ステートメントを追加し、putsアプリまたはコンソールを起動したときに表示されるかどうかを確認します。

補足として。ディレクトリのルートに gemspec を配置する必要はないと思います。これにより、lib フォルダーが gem と rails アプリに使用されるようになります。たとえば、サブフォルダーを作成してから、topic/内部で gem をホストすることをお勧めします。次に、Gemfile に次のように追加できます。

gem 'topic', :path => './topic'
于 2012-12-30T19:50:26.823 に答える
0

Yvesが言及しているように、宝石を独自のディレクトリに配置することを強くお勧めします。

ただし、他の問題も発生する可能性があります。いくつか試してみましょう。

コントローラー内でトピックを使用しようとしているようですが、外部を検索していない可能性がありますか? :s::Topic代わりに使用してみてください。::「ルート」を調べるように指示するため、検索は行われませんApplicationController::Topic

それでもうまくいかない場合は、gem に名前空間がない可能性があります。バンドルなど、gem と同じ名前の名前空間 (モジュール) が必要だと思うので、次のようにする必要があります。

# in topic/lib/topic.rb
module Topic
end

#require other parts of the gem
require 'topic/foo'
require 'topic/bar'

私が助けてくれることを願っています

于 2012-12-30T20:32:31.813 に答える