#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.