[英]Cannot access models from /lib in Rails
我編寫了一個腳本來嘗試一些功能。 但是我不能在lib中使用模型。 有趣的是,我已經有了一個庫,並且在大多數相同的代碼(?)下都可以正常工作。
// script/tags.rb:
require File.expand_path('../../config/application', __FILE__)
require 'company_tags'
host = ARGV[0] || 'team1.crm.tld'
c = CompanyTags.new(host)
c.run
// lib/company_tags.rb
class CompanyTags
def initialize(host)
@site = Site.where(host: host).first
end
def run
comp = @site.companies.first
comp.tag_list.add("tag1")
comp.general_list.add("tag_general")
comp.save!
p comp.tag_list
end
end
錯誤:/lib/company_tags.rb:3:在“初始化”中:未初始化的常量CompanyTags :: Site(NameError)
您需要環境而不是應用程序。
require File.expand_path('../../config/environment', __FILE__)
require 'company_tags'
該環境將加載所有依賴項,包括應用程序,並將引導該應用程序。
只是一個想法,但是嘗試將Site.where(host: host).first
更改為::Site.where(host: host).first
。 將::
放在前面,會導致ruby在全局名稱空間中查找Site
,而不是在CompanyTags
定義的常量。
您可以向config/application.rb
添加一個簡單的配置:
# Autoload lib/ folder including all subdirectories
config.autoload_paths += Dir["#{config.root}/lib/**/"]
查看此問題以獲取更多詳細信息。
在我之前的回答中,我認為您正在運行Rails控制台。 您的主要問題是不需要Site類。 這是要求類文件運行的方式。
通過require_all
函數
require_all(MY_CLASSES_DIRECTORY)
或通過手動要求每個班級:
需要“ Class_NAME.rb”
請注意,在任何地方都不需要Site
類。
有關更多詳細信息,請檢查此鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.