【问题标题】:rails organizing folders for service objectsrails 为服务对象组织文件夹
【发布时间】:2016-06-08 20:18:53
【问题描述】:

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

这里发生了什么?我应该如何组织我的文件夹/文件?我必须告诉 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

【问题讨论】:

    标签: ruby-on-rails service-object


    【解决方案1】:

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

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

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

    然后重启consoleserver

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

    请参阅Autoloading and Reloading Constants 了解更多信息。

    【讨论】:

    • 谢谢达拉姆。我不确定这是否是正确的方法。我查看了一个 github 存储库,该人使用相同的文件夹结构,但他没有在 application.rb 中包含这一行。多亏了这一点,我认为必须有更好的方法来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 2015-05-18
    • 2010-12-20
    • 2011-08-19
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多