2016-06-08 3 views
0

Я пытаюсь создать объект службы, чтобы извлечь несколько методов из модели ARM product.rb, но по какой-то причине я не могу автозагрузить новый класс 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.

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

Для получения дополнительной информации см. Autoloading and Reloading Constants.

+0

Спасибо Dharam. Я не был уверен, правильно ли это. Я проверил репозиторий github, где парень использует ту же структуру папок, но не включил эту строку в 'application.rb'. Благодаря этому я думал, что должен быть лучший способ сделать это. –

Смежные вопросы