我有以下项目结构:
/app
/config
/db
...
/themes
/default
/assets
/images
/stylesheets
/...
/views
/...
/theme1
/assets
/...
/views
/...
默认情况下应使用“默认”主题:)。'theme1' - 应该覆盖任何,例如 logo.png 或 view (application.erb)。
它应该以这种方式工作:如果不存在,请尝试从“theme1”获取资产 - 从“默认”使用。
视图非常简单:
self.prepend_view_path ::ActionView::FileSystemResolver.new(theme_view_path_for(name))
self.prepend_view_path ::ActionView::FileSystemResolver.new(default_theme_path)
但我无法用资产解决它。
config.assets.paths << "#{Rails.root}/themes/default/assets/stylesheets"
config.assets.paths << "#{Rails.root}/themes/default/assets/images"
config.assets.paths << "#{Rails.root}/themes/default/assets/javascript"
这会像往常一样添加资产,例如可以使用 url 'assets/logo.png' 访问资产,但我需要一个前缀 - “assets/theme1/logo.png”。此外,如果“theme1”没有通过“assets/theme1/logo.png”url 覆盖 logo.png,则应该返回“默认”主题徽标。(类似于上面的视图)。
我已经尝试过themes_for_rails - 但它不适合,因为它们覆盖了整个资产结构(自己的服务控制器等)。
此外,能够挂钩资产解析会很棒,例如,当访问 logo1.png 时,应该可以使用我的控制器提供它并从数据库中返回它。
感谢您的任何建议,我会在完成后分享结果。
基里尔·萨雷金