rails中的后备格式

时间:2010-02-02 20:50:19

标签: ruby-on-rails

对于我的CM我希望能够轻松添加新主题,我的想法是简单地为新主题添加mime类型(因此application.theme1.erb可以工作)。

但99%的主题我不想改变观点,而不是全部。

如果主题视图不存在,

有什么东西可以让rails回到html上?

3 个答案:

答案 0 :(得分:0)

我对Rails很新,所以这可能不是一个完美的答案:

你可能想尝试使用querystring参数作为路由的一部分,如下所述: http://guides.rubyonrails.org/routing.html#querystring-parameters

所以最终这样的事情会起作用

map.connect ':theme/:controller/:action/:id' 

据我所知,主题将在控制器中以params [:theme]的形式提供。如果没有指定主题,您可能需要添加另一个路径,如

map.connect '/:controller/:action/:id' 

处理这种情况。

在i18n指南中,针对区域设置描述了类似的内容:http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-url-params

希望有所帮助。

答案 1 :(得分:0)

这取决于您希望使用主题更改多少布局。 如果你正确构建HTML,大多数事情都可以通过css完成。 (改变字体,颜色,东西出现的地方)

然后,只需添加一个主题参数来设置样式就很容易了。

如果您不想这样做,您可以随时为它创建一个单独的布局,并根据传入的参数进行分配(或者甚至将其设置为会话变量,这样您就不会在URL)。

基本上,对于默认主题,您坚持使用layouts/application.erb,然后您说layouts/theme1.erb,然后使用方法分配

class ApplicationController 
   layout :decide_layout


  def decide_layout
    @session[:layout] || 'application'
  end
end

只需在您的操作中执行以下操作即可自定义视图:

def my_action
  render "my_action_#{@session[:layout]}" if @session[:layout]
end

如果未设置@session[:layout],则会呈现默认值,否则会呈现您的主题视图。

当然,如果您根据用户输入设置布局,请务必先清理并检查布局参数。

答案 2 :(得分:0)

我在mobile_fu遇到了同样的问题,它将格式设置为移动请求的:mobile

事实证明,如果:action.:format.erb模板不可用,Rails将以任何格式替换:action.rhtml

我不能说这是否适用于布局,但它肯定适用于行动