【问题标题】:Rails doesn't recognise my app/services (uninitialized constant)Rails 无法识别我的应用程序/服务(未初始化的常量)
【发布时间】:2017-09-13 08:24:25
【问题描述】:

我被困住了,即使我找到了一些关于这个问题的主题,我也没有找到任何解决方案。

如果我的“Packer”注册到我们的时事通讯,我正在尝试添加 Mailchimp 订阅(“Packer”是一种“用户”-“用户”只有设计参数,“包装器”有其余参数)

错误是一个未初始化的常量,似乎是因为rails无法识别我的服务。

这是我的#app/models/packer.rb

after_create :subscribe_to_newsletter
after_update :subscribe_to_newsletter
private
def subscribe_to_newsletter
  SubscribeToNewsletterService.new.call(self.user) if self.newsletter
end

还有我的 #app/services/subscribe_to_newsletter_service.rb

require "gibbon"
class SubscribeToNewsletterService
  def initialize
    @gibbon = Gibbon::Request.new(api_key: ENV['MAILCHIMP_API_KEY'])
    @list_id = ENV['MAILCHIMP_NEWSLETTER_LIST_ID']
  end
  def call(user)
    @gibbon.lists(@list_id).members.create(
      body: {
        email_address: user.email,
        status: "subscribed",
        double_optin: false,
        # merge_fields: {
        #   FNAME: @user.first_name,
        #   LNAME: @user.last_name
        # }
      }
    )
  end
end

查看不同的解决方案,我还在#config/application.rb 中添加了该行

module Pyswebsitev1
  class Application < Rails::Application
    @config.autoload_paths += %W(#{config.root}/app/services)
    config.i18n.default_locale = :en
  end
end

当我做一个 Rails 控制台时 - ActiveSupport::Dependencies.autoload_paths 结果包括 /app/services

"/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/assets",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/channels",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/controllers",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/controllers/concerns",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/helpers",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/jobs",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/mailers",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/models",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/models/concerns",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/policies",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/app/services",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rails-assets-underscore-1.8.3/app/assets",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/jquery-fileupload-rails-0.4.7/app/assets",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/attachinary-98a895be22ed/app/controllers",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rails_admin-1.2.0/app/assets",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rails_admin-1.2.0/app/controllers",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rails_admin-1.2.0/app/helpers",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/jquery-ui-rails-5.0.5/app/assets",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/font-awesome-rails-4.7.0.2/app/assets",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/font-awesome-rails-4.7.0.2/app/helpers",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-4.3.0/app/controllers",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-4.3.0/app/helpers",
 "/usr/local/Cellar/rbenv/1.0.0/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-4.3.0/app/mailers",
 "/Users/MaxBook/code/PackYourSkills/pyswebsitev1/test/mailers/previews"

我也尝试过“Spring stop”、重启服务器和捆绑。

如果您有任何想法,那将非常有帮助! 非常感谢

【问题讨论】:

    标签: ruby-on-rails service initialization constants gibbon


    【解决方案1】:

    如果您将_service 放在您的问题中,也许您忘记将它放在您的文件名事件中。只是猜测......

    【讨论】:

      【解决方案2】:

      您忘记了文件名末尾的_service

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 2017-07-18
        • 2017-01-11
        相关资源
        最近更新 更多