首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Faker gem本地未初始化的常量Faker::xxx

扩展Faker gem本地未初始化的常量Faker::xxx
EN

Stack Overflow用户
提问于 2013-01-09 02:00:35
回答 1查看 1.4K关注 0票数 2

我想扩展rails的faker gem以生成其他随机日期(在我的例子中是计算机游戏名称)。

代码语言:javascript
复制
#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控制台中运行它时,我会得到以下结果

代码语言:javascript
复制
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文件更改为

代码语言:javascript
复制
require 'faker'
require 'extended_faker/game'
include 'extended_faker/item'
include 'extended_faker/team'

我在控制台中遇到了奇怪的行为

代码语言:javascript
复制
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>'

奇怪的是,我不明白的是,我第一次运行生成器时,我得到了一个有效的结果,但第二次运行时,我得到了一个错误……

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-09 02:16:36

你应该把它放进去

lib/faker/game.rb

从lib目录开始,rails约定是最外层的模块名-> in是文件夹名称。然后,实际的类/模块名称就是文件名,并在camelcase中加下划线。

另一个示例

代码语言:javascript
复制
module Foo
  module Bar
    class BazParty
      def self.hello
        puts "hello"
      end
    end
  end
end

将在lib/foo/bar/baz_party.rb中运行

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14221223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档