我的网站已经启动并正在运行。我想在我的Ruby on rails网站上添加一个新页面,并希望使页面看起来完全不同。
Different Layout, Different Theme, Everything.
我为这些页面创建了一个新的脚手架。但我不确定如何达到预期的效果。
答案 0 :(得分:0)
有关呈现不同布局的不同方法,您还可以参考此railscast
是的,您可以通过从控制器操作传递一些params
并签入application.html.erb
假设您有users_controller
和home
作为控制器操作作为root
路径
然后在用户控制器中
def home
params.store(:diff_page, true)
end
在application.html.erb
中在你的申请中,content
是主体内部id
,然后是
#content{:class => (params[:diff_page] ? "back-black" : "back-gradient")}
back-black
和back-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;站点有自己的路径,控制器和视图,但访问与主站点相同的模型和数据库:同一个应用程序的两个面。