【问题标题】:uninitialized constant for module included in model模型中包含的模块的未初始化常量
【发布时间】:2013-10-13 11:32:12
【问题描述】:

我已经阅读了很多关于此的其他 SO 帖子,似乎约定是将模块放在 lib (lib/my_module.rb) 中并将其命名为 CamelCase(模块 MyModule),然后将其包含在模型中(包括我的模块)。我做了所有这些,仍然得到“未初始化的常量 Model::MyModule”。我想知道 Rails 4 中是否发生了一些变化,或者我是否必须在我的 config/environment.rb 文件中做一些事情。这是我的代码:

app/models/comment.rb

class Comment < ActiveRecord::Base
    include KarmaExtension # error at this line

    belongs_to :user
    belongs_to :post
    belongs_to :parent, class_name: "Comment"

    ...
end

lib/karma_extension.rb

module KarmaExtension
    def karma_recieved_from?(sender)
        sender ? !karmas.where("sender_id = ?", sender.id).empty? : true
    end
end

还有我的 config/environment.rb 以防万一(没碰过这个文件)

# Load the Rails application.
require File.expand_path('../application', __FILE__)

# Initialize the Rails application.
RailsHnClone::Application.initialize!

【问题讨论】:

  • 遵循的约定似乎是正确的。 Rails 在遇到MyModule 时会查找my_module.rb。尝试require模型顶部的文件一次;交叉检查文件是否被实际包含。

标签: ruby-on-rails ruby


【解决方案1】:

/lib 添加到您的load_path

# in config/application.rb
config.autoload_paths += %W(#{config.root}/lib)

并且需要你的库:

# in config/initializers/karma_extension.rb
require 'karma_extension'

在这里找到答案:http://blog.chrisblunt.com/rails-3-how-to-autoload-and-autorequire-your-custom-library-code/

【讨论】:

  • 不要忘记在此操作之前重新启动您的服务器。感谢您的回答!
猜你喜欢
  • 2011-05-26
  • 2014-02-23
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多