Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 一个RubyonRails站点中的多个布局_Ruby On Rails_Layout - Fatal编程技术网

Ruby on rails 一个RubyonRails站点中的多个布局

Ruby on rails 一个RubyonRails站点中的多个布局,ruby-on-rails,layout,Ruby On Rails,Layout,我有一个网站,已经开始运行。我想在我的RubyonRails网站上添加一个新页面,并希望使页面看起来完全不同 Different Layout, Different Theme, Everything. 我已经为这些页面创建了一个新的脚手架。但是我不确定如何达到预期的效果。有关渲染不同布局的不同方法,您也可以参考此 是的,您可以通过从控制器操作中传递一些params并签入application.html.erb 假设您有users\u controller和home作为您的根路径的控制器操作

我有一个网站,已经开始运行。我想在我的RubyonRails网站上添加一个新页面,并希望使页面看起来完全不同

Different Layout, Different Theme, Everything.

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

有关渲染不同布局的不同方法,您也可以参考此

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

假设您有
users\u controller
home
作为您的
根路径的控制器操作

然后在用户控制器中

def home
   params.store(:diff_page, true)
end
在application.html.erb中

在应用程序中,
content
是主体内主div的
id

#content{:class => (params[:diff_page] ? "back-black" : "back-gradient")}
back black
back gradient
都是css类,您可以定义不同的样式和页面、背景图像以及任何您想要的内容

也可以根据参数调用不同的partial

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

您可以为主题创建资产,使页面看起来完全不同。Rails在
app/views/layouts/application.html.erb

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

render layout: "<your-layout-name>"
渲染布局:“

我们在我帮助管理的一个站点上这样做:我们有两个完全不同的域,每个域都有自己完全独特的外观和感觉,运行在同一个rails应用程序上。第二个域在我们的项目结构中称为“cmw”,其设置如下

路线 您可以在路由上设置一个条件,该路由查看请求域,并且仅当域与该条件匹配时才运行该路由。因此,我们将所有cmw路由放在路由文件的顶部,所有路由都具有相同的条件。然后,在下面,是常规站点路径。当我们收到对“cmwdomain.com”的请求时,它将触发一条cmw路由。对“maindomain.com”的请求将通过所有cmw路由,因为它们具有此域失败的条件,并命中以下一条主站点路由

乙二醇

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

意见 为了将视图与控制器相匹配,我们有一个文件夹
app/views/cmw
,所有不同的cmw控制器对应的视图文件夹都位于该文件夹中

这个系统很好,很干净。第二个“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"