Возможен ли доступ к модулю из файла haml?

#ruby-on-rails #ruby #haml

#ruby-on-rails #ruby #haml

Вопрос:

Я хотел бы создать сортировку своих помощников по подмодулям, чтобы сделать код более чистым. Например, я хотел бы реализовать что-то вроде этого:

 = UI.spawn_component(UI.alert, UI.error, "message")
  

Я уже пробовал просто создать модуль в моем вспомогательном модуле следующим образом:

 module StyleguideHelper
  module UI
    def spawn_component(user, type)
      return user
    end
  end
end
  

И я также попытался создать модуль в другом файле и запросить его из моего вспомогательного файла. Оба варианта не сработали.

Комментарии:

1. Таким образом нельзя вызывать обычные функции из модулей. Это не сработало бы даже в irb . spawn_component должна быть функция модуля, чтобы вызывать ее подобным образом.

2. Я попытался создать spawn_component функцию модуля (определив ее как self.spawn_component , верно?), но это выдает мне эту ошибку: uninitialized constant ActionView::CompiledTemplates::UI

3. Вы пробовали StyleGuideHelper::UI.spawn_component(StyleGuideHelper::UI.alert, StyleGuideHelper::UI.error, "message") ?

4. Да, та же ошибка, только с помощью StyleGuideHelper.

5. ::StyleGuideHelper::UI.spawn_component(...) .

Ответ №1:

Сначала убедитесь, что файл назван правильно, чтобы автозагрузка работала корректно. Если модуль вызывается, StyleguideHelper тогда файл должен быть назван styleguide_helper.rb . Я бы поместил этот файл в app/helpers , если только вы не настроили библиотеку для автозагрузки. Определите свои модули в этом файле следующим образом:

 module StyleguideHelper
  module UI
    def self.spawn_component(user, type)
      return user
    end
  end
end
  

Затем вы должны иметь возможность использовать помощник в вашем представлении следующим образом:

 = StyleguideHelper::UI.spawn_component(user, type)
  

Комментарии:

1. Большое вам спасибо, это сработало отлично! Также, что касается именования файлов: верно ли это для любого модуля?

2. Да, это верно для любого модуля или класса, которые должны автоматически загружаться Rails.