Используете библиотеки в движках Rails (4.1.x)?

Итак, основная проблема заключается в следующем:

`<class:ApplicationController>': uninitialized constant Xaaron::Core (NameError)

Поэтому я думаю, что некоторые из шагов, которые я сделал, будут излишними, но я новичок в попытках добавить код в папку моей библиотеки в движке rails, в rails это довольно просто. Но здесь его не так уж и много.

Итак, вот что я сделал:

in:

xaaron/
  lib/
    xaaron/

У меня есть каталог core/ с файлом loder.rb.

Внутри ядра находится каталог с именем controllers, а сбоку находится файл с именем user_controller, который выглядит так:

module Xaaron
  module Core
    module UserController
      def assign_to_member_group(user)
        memeber = Xaron::Group.find('member')
        user.add_group = memeber.group_name
      end
    end
  end
end

Для загрузки у меня есть файл загрузчика:

module Xaaron
  module Core
    module Loader
      include Xaaron::Core::Controllers::UserController
    end
  end
end

Я не думаю, что это необходимо, потому что в файле engine.rb я делаю: config.autoload_paths << File.expand_path("../xaaron/core/**", __FILE__), который просто переходит на один каталог в каталог lib/ и загружает xaaron / core / и все, что в нем (по крайней мере, я так думал).

Этот loader.rb файл включен в ApplicationController

module Xaaron
  class ApplicationController < ActionController::Base
    ...

    include Xaaron::Core::Loader
    ...
  end
end

So:

  • Как правильно загрузить мою "основную" библиотеку
  • Почему я получаю указанную выше ошибку?

person SeekingTruth    schedule 05.11.2014    source источник
comment
Уточните, что и откуда хотите загрузить. Я имею в виду, Xaaron::Core::Loader исходит от двигателя, а ApplicationController от main_app?   -  person blelump    schedule 05.11.2014
comment
Извините за это: Xaaron::Core::Loader находится в xaaron/lib/xaaron/core/loader.rb - это отдельная часть движка   -  person SeekingTruth    schedule 05.11.2014


Ответы (1)


Думаю, ваша проблема с config.autoload_paths << File.expand_path("../xaaron/core/**", __FILE__). Он расширяется в что-то вроде Rails.root/lib/engine_name/xaaron/core/**, и ваш путь к библиотеке должен быть Rails.root/lib/xaaron/core. Итак, в вашем случае путь к библиотеке должен быть config.autoload_paths << File.expand_path("../../xaaron/core", __FILE__)

Более того, находясь в вашем ApplicationController, достаточно включить include Core::Loader, потому что вы уже находитесь в пространстве имен Xaaron.

Прежде чем вы начнете работать с контроллерами, попробуйте просто вызвать свой модуль Xaaron::Core::Loader в rails console.

person blelump    schedule 05.11.2014
comment
Теперь я получаю NameError: uninitialized constant Core в rails console. Я добавил config.autoload_paths << File.expand_path("../../xaaron/core", __FILE__) в engine.rb, но не думаю, что это помогло - person SeekingTruth; 06.11.2014
comment
Это не так. Вы проверили, в какой путь File.expand_path("../../xaaron/core", __FILE__) расширяется (просто puts или отлаживая его)? Если да, то находится ли ваш модуль в этом каталоге? - person blelump; 06.11.2014