Рельсы, организующие папки для сервисных объектов

Я пытаюсь создать сервисный объект, чтобы извлечь несколько методов из product.rb Модель AR, но по какой-то причине я не могу загрузить новую TwitterShare учебный класс. Когда я бью консоль и пытаюсь что-то вроде Product.last.twitter_share_text я получил NameError: uninitialized constant Product::TwitterShare ошибка.

Что здесь происходит? Как мне организовать свои папки / файлы? Нужно ли указывать рельсы службам автозагрузки? Вот текущий код:

приложение / модели /product.rb

class Product < ActiveRecord::Base  

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

приложение / услуги /twitter_share.rb

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

  def initialize....
end

1 ответ

Решение

Вы должны позволить rails знать, где можно найти TwitterShare,

Добавьте следующее к вашему application.rb

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

а затем перезапустите console или же server,

rails теперь должен быть в состоянии найти twitter_share.rb и загрузить TwitterShare правильно.

Обратитесь к Автозагрузке и Перезагрузке Константы для получения дополнительной информации.

Другие вопросы по тегам