2

Railsのフェイカージェムを拡張して、他のランダムな日付(私の場合はコンピューターゲーム名)も生成したい

#lib/extended_faker.rb
require 'faker'
require 'extended_faker/game'

#lib/extended_faker/game.rb
Module Faker
    class Game < Faker::Base
        class << self
            def name
                fetch('game.name')
            end
        end
    end
end

#config/locals/faker_en.yml
en:
  faker:
    game:
      name: ["a", "b", "c"]

#config/application.rb
...
config.autoload_paths += Dir["#{config.root}/lib/**/"]
...

次に、Railsコンソールで実行すると次のようになります

Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > Faker::Game.name
LoadError: Expected /home/enermis/School/Projects/IG/test/lib/extended_faker/game.rb to define Game
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:503:in `load_missing_constant'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:192:in `block in const_missing'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:190:in `each'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:190:in `const_missing'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:514:in `load_missing_constant'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:192:in `block in const_missing'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:190:in `each'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:190:in `const_missing'
    from (irb):1
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands/console.rb:47:in `start'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands/console.rb:8:in `start'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

lib / extended_faker/game.rbファイルをこれに変更すると

require 'faker'
require 'extended_faker/game'
include 'extended_faker/item'
include 'extended_faker/team'

コンソールで奇妙な動作をします

Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > Faker::Game.name
 => "b" 
1.9.3p194 :002 > Faker::Game.name
NameError: uninitialized constant Faker::Game
    from (irb):2
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands/console.rb:47:in `start'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands/console.rb:8:in `start'
    from /home/enermis/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

私が理解していない奇妙なことは、最初にジェネレーターを実行すると有効な結果が得られますが、2回目はエラーが発生することです...

私は何が欠けていますか?

4

1 に答える 1

1

libディレクトリから開始する必要があります。rails
lib/faker/game.rb
の規則は最も外側のモジュール名です->はフォルダ名です。その場合、実際のクラス/モジュール名はファイル名であり、キャメルケースに下線が引かれています。
もう一つの例

module Foo
  module Bar
    class BazParty
      def self.hello
        puts "hello"
      end
    end
  end
end

入るだろうlib/foo/bar/baz_party.rb

于 2013-01-08T18:16:36.130 に答える