#ruby-on-rails #spree
#ruby-on-rails #spree
Вопрос:
Почему мой код не переопределяет код Spree?
app/helpers/spree/frontend_helper_decorator.rb
Spree::FrontendHelper.module_eval do
def taxons_tree(root_taxon, current_taxon, max_level = 1)
return '' if max_level < 1 || root_taxon.children.empty?
content_tag :ul, class: 'taxons-list' do
root_taxon.children.map do |taxon|
css_class = (current_taxon amp;amp; current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil
content_tag :li, class: css_class do
link_to(taxon.name, seo_url(taxon))
taxons_tree(taxon, current_taxon, max_level - 1)
end
end.join("n").html_safe
end
end
end
Комментарии:
1. Можете ли вы попробовать переименовать свой файл в
frontend_helper.rb
?2. ошибка @MrShemek:
Circular dependency detected while autoloading constant Spree::FrontendHelper
3. Не могли бы вы изменить первую строку на:
module Spree::FrontedHelper
(удалитьmodule_eval
блок)?4. @MrShemek я делал это раньше. Это приводит к проблеме, заключающейся в том, что работает только мой пользовательский метод, а другие из Spree ::FrontendHelper — нет.
5. @MrShemek я нашел решение, см. Мой ответ)
Ответ №1:
У вас это было в вашем application.rb
?
config.to_prepare do
# Load application's model / class decorators
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
# Load application's view overrides
Dir.glob(File.join(File.dirname(__FILE__), "../app/overrides/*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
end
Комментарии:
1. нет, почему он должен быть у меня? есть ли какой-нибудь документ об этом?
2. При выполнении
rails g spree:install
добавляется в application.rb. Проверьте github.com/spree/spree/blob/master/core/lib/generators/spree /…3. Спасибо за объяснение. Не знаю, почему мой application.rb пропускает эти строки…
Ответ №2:
Посмотрите принятый ответ выше
Итак, это сработало после того, как я добавил файл декоратора в качестве требования к инициализатору:
spree.rb
require "#{Rails.root}/app/helpers/spree/frontend_helper_decorator.rb"
Чтобы добавить декоратор всех помощников, я использую этот код:
Dir["#{Rails.root}/app/helpers/spree/*.rb"].each {|file| require file }
Не забудьте перезапустить сервер после этого изменения!