2015-04-28 3 views
0

Моя тестовая папка структурирована следующим образом:неинициализированным постоянный файл в подкаталоге

test 
    models 
     restaurant 
     helpers 
      employee.rb 
     points_test.rb 

Так мой PointsTest выглядит следующим образом:

require 'models/restaurant/helpers/employee.rb' 

    class Restaurant::PointsTest < ActiveSupport::TestCase 
    .... 
    employee1 = Restaurant::Employee.create 

И файл Employee так:

class Restaurant::Employee 
    def self.create 
    ..... 

Все работает следующим образом

---------------------------------------------

Теперь я попытался изменить class Restaurant::Employee к class Restaurant::Helpers::Employee

и PointsTest я изменил к employee1 = Restaurant::Helpers::Employee.create

и я получаю эту ошибку :

неинициализированным константа Re staurant :: Помощники (NameError)

Что я не так? Я имею в виду, что Helpers находится в подпапках helpers!

ответ

1

Вы не можете просто объявить константы в цепочке, такие как A::B::C::D, так как каждая константа должна быть поднята.

module Restaurant 
    module Helper # declare module Helper 
    class Employee 
     ... 

будет работать. В то время как

   # ⇓⇓⇓⇓⇓⇓ fail on try to const_get(:Helper) 
class Restaurant::Helper::Employee 

терпит неудачу на постоянном Helper поиска, так как она не определена. Надеюсь, поможет.

+0

Привет, Спасибо! И есть ли способ сократить «модульные» декларации. Есть ли способ разместить его в одной строке? –

+1

Конечно, модуль-ресторан; Помощник модуля; класс Employee' с соответствующим закрытием 'end; конец ; end' работает. Но в целом использование этого не является лучшей практикой. Я бы объявил 'module Restaurant :: Helper; end', а затем используйте начальную короткую нотацию, которая теперь прекрасна, так как модуль уже определен. – mudasobwa

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