我在它自己的 gem 中放置了一些用于 rails 应用程序的共享模型。这只是模型,所以我没有使用引擎。在我添加“acts_as_list”gem 之前,设置它似乎工作正常。
# gem - domain.gemspec
spec.add_dependency "acts_as_list"
# gem - lib/domain.rb
require "acts_as_list"
# gem - lib/domain/models/page.rb
acts_as_list scope: [:ancestry]
这在我的 gem 的控制台中运行良好,我可以像往常一样运行特定于acts_as_list 的方法。但是,当我将我的 gem 添加到另一个项目时,它给了我一个错误。
# project - Gemfile
gem "www_domain", path: "../www_domain"
Bundler::GemRequireError: There was an error while trying to load the gem 'domain'.
NoMethodError: undefined method `acts_as_list' for #<Class:0x0055da70121ab0>
/home/shaun/sites/demo/domain/lib/domain/models/page.rb:32:in `<class:Page>'
acts_as_list
在这种情况下,由于我的模型位于 gem中,我是否需要做一些特别的事情才能访问该方法?
更新:这是我完整lib/domain.rb
的 gem 文件:
require "yaml"
require "active_record"
require "acts_as_list"
require "ancestry"
# rbfiles = File.join(File.dirname(__FILE__), "lib", "**", "*.rb")
# Dir.glob(rbfiles).each do |file|
# require file.gsub("lib/", "")
# end
module Domain
# Your code goes here...
def self.root
File.dirname(__dir__)
end
def self.db_config
YAML.load_file("#{Domain.root}/db/config.yml")["development"]
end
end
require "domain/version"
require "domain/models/page"
require "domain/models/menu"
require "domain/models/article"
require "domain/models/page_part"
我可以在我的 gem 的控制台中使用acts_as_list
和方法(从 gem 目录运行)。但是由于我提到的 gem 错误,项目控制台(从项目目录运行)将无法启动。ancestry
bin/console
bundle exec rails console