我正在为rails 3应用程序创建一个简单的主题系统。
主题包含放置在Rails.root
/主题中的文件夹,其中包含
现在对于某些控制器/动作我想从当前主题渲染视图,因此相应地使用静态资源。
因此我需要一种方法来告诉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}" }
完全符合我的要求,遗憾的是,在启用资产管道时它将不适用。
答案 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
您的观点和邮寄者也有帮助函数。