簡體   English   中英

無法從Rails中的/ lib訪問模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM