我已经阅读了很多关于此的其他SO帖子,似乎惯例是将模块放在lib(lib / my_module.rb)中,并将其命名为CamelCase(模块MyModule),然后将其包含在模型中(包括MyModule)。我做了所有这些,仍然得到“未初始化的常量Model :: MyModule”。我想知道Rails 4中是否有变化,或者我是否必须在config / environment.rb文件中执行某些操作。这是我的代码:
应用程序/模型/ 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!
答案 0 :(得分:2)
将/lib
添加到load_path
:
# in config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
并要求你的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/