rails 组织服务对象的文件夹

rails organizing folders for service objects

我正在尝试创建一个服务对象以从 product.rb AR 模型中提取一些方法,但由于某些原因我无法自动加载新的 TwitterShare class .当我打开控制台并尝试 Product.last.twitter_share_text 之类的操作时,我收到 NameError: uninitialized constant Product::TwitterShare 错误。

这里发生了什么?我应该如何组织我的 folders/files?我必须告诉 rails 自动加载服务吗?这是当前代码:

app/models/product.rb

class Product < ActiveRecord::Base  

  def twitter_share_text
    TwitterShare.new(name: self.name, oneliner: self.oneliner).return_text
  end

app/services/twitter_share.rb

class TwitterShare
  attr_reader .........

  def initialize....
end

您需要让 rails 知道它可能在哪里找到 TwitterShare

将以下内容添加到您的 application.rb

config.autoload_paths << "#{Rails.root}/app/services"

然后重新启动 consoleserver

rails 现在应该能够找到 twitter_share.rb 并正确加载 TwitterShare

有关详细信息,请参阅 Autoloading and Reloading Constants