Rails 3:根据主题提供来自不同位置的静态资产

时间:2011-07-01 18:34:23

标签: ruby-on-rails ruby-on-rails-3 assets rails-engines

我正在为rails 3应用程序创建一个简单的主题系统。 主题包含放置在Rails.root /主题中的文件夹,其中包含

  • .yml清单文件
  • 一些liquid模板文件
  • 静态资源子文件夹

现在对于某些控制器/动作我想从当前主题渲染视图,因此相应地使用静态资源。

因此我需要一种方法来告诉rails重写

  • http://example.com/theme1/* ----> #{Rails.root}/themes/theme1/assets/*
  • http://example.com/theme2/* ----> #{Rails.root}/themes/theme2/assets/*
  • ...

目前我无法弄清楚如何执行此操作,因为我希望避免为每个主题使用不同的引擎或复制public子文件夹中的资源文件。

我该如何解决这个问题?

编辑:其他要求

我正在寻找一些不会破坏rails默认值的东西,这样我以后可以利用新的资产管道功能(计划用于rails 3.1)。

目前我发现只有这个:

config.asset_path = proc { |asset_path| "assets/#{asset_path}" } 

完全符合我的要求,遗憾的是,在启用资产管道时它将不适用。

1 个答案:

答案 0 :(得分:0)

查看themes_for_rails插件。

自述文件的以下摘录显示了如何根据您需要的任何逻辑更改使用的主题。

在控制器操作中:

class MyController < ApplicationController
  def show
    theme "purple"
  end
end

在控制器的课程级别:

class MyController < ApplicationController
  theme "purple" # all actions will use this theme
  def show
    ...
  end
end 

或者使用“resolver”lambda / function:

class MyController < ApplicationController
  theme :theme_resolver
  # ...
private
  def theme_resolver
    current_user.theme # or anything else that return a string. 
  end
end

您的观点和邮寄者也有帮助函数。