一个Ruby on Rails网站上的多个布局

时间:2015-03-10 13:17:13

标签: ruby-on-rails layout

我的网站已经启动并正在运行。我想在我的Ruby on rails网站上添加一个新页面,并希望使页面看起来完全不同。

Different Layout, Different Theme, Everything.

我为这些页面创建了一个新的脚手架。但我不确定如何达到预期的效果。

3 个答案:

答案 0 :(得分:0)

有关呈现不同布局的不同方法,您还可以参考此railscast

是的,您可以通过从控制器操作传递一些params并签入application.html.erb

来执行此操作

假设您有users_controllerhome作为控制器操作作为root路径

然后在用户控制器中

def home
   params.store(:diff_page, true)
end

在application.html.erb

在你的申请中,content是主体内部id,然后是

#content{:class => (params[:diff_page] ? "back-black" : "back-gradient")}

back-blackback-gradient都是css类,你可以定义不同的样式和页面,背景图像你想要的任何东西

你也可以根据params调用不同的部分

   - if params[:diff_page]
        = render :partial => 'users/new_page'
   - else
        = render :partial => "layouts/page"

答案 1 :(得分:0)

您可以为主题创建资源,使页面看起来完全不同。 Rails使用app

处的默认app/views/layouts/application.html.erb布局

但是,您可以使用主题创建另一个布局并使用以下方式渲染视图:

render layout: "<your-layout-name>"

答案 2 :(得分:0)

我们在其中一个帮助管理的网站上执行此操作:我们有两个完全不同的域,每个域都有自己独特的外观和感觉,运行相同的rails应用程序。第二个域称为&#34; cmw&#34;在我们的项目结构中,并设置如下。

路由

您可以在查看请求域的路由上放置条件,并且只有在域匹配条件时才运行该路由。因此,我们将所有cmw路由放在routes文件的顶部,所有路径都具有相同的条件。然后,在下面,常规站点路由。当我们收到&#34; cmwdomain.com&#34;的请求时,它将触发其中一个cmw路由。请求&#34; maindomain.com&#34;将落在所有cmw路由中,因为它们具有此域失败的条件,并且击中下面的主站点之一的路由。

例如

#################### START OF CMW ROUTES:  ALL HAVE A CONDITION ON THEM TO DIFFERENTIATE THEM FROM REGULAR ROUTES ###############
cmw = { :host => CMW_HOST_REGEX }  

map.resources :licenses, :controller => "cmw/licenses", :conditions => cmw
map.resources :users, :controller => "cmw/users", :conditions => cmw

#REGULAR ROUTES  
map.resources :licenses, :controller => "licenses"
map.resources :users, :controller => "users"

控制器

上述系统将所有cmw请求发送到app / controllers / cmw文件夹中的控制器。通常,所有控制器都会扩展ApplicationController。在我们的例子中,我们有一个CmwController,它扩展了ApplicationController,有点像CMW特定版本的ApplicationController。它有自己的默认布局以及特定于cmw站点的各种受保护方法和帮助程序。然后,所有cmw控制器都扩展了CmwController而不是ApplicationController。

的观点

为了使视图与控制器相匹配,我们有一个文件夹app/views/cmw,其中包含所有不同的cmw控制器&#39;相应的视图文件夹直播。

这个系统很干净。第二个&#34; cmw&#34;站点有自己的路径,控制器和视图,但访问与主站点相同的模型和数据库:同一个应用程序的两个面。