首页 > 解决方案 > Rails - 拥有完全两种不同设计的最佳实践

问题描述

我对 Rails 很陌生。

在创建网站时,您拥有公司的实际网站,描述您的产品以及更多信息,但您还需要一个用户面板,他可以在其中管理他的东西。

例如一个加密钱包网站,你有一个实际的网站,解释一切,显示信息等等,你有一个与网站设计完全不同的交易面板。

在 Rails 中,您拥有application.html.erb构建整个网站的文件:

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

yield呈现用户正在浏览的当前视图。

您如何使用这种结构管理完全两种不同的设计?为用户面板创建一个全新的 Rails 项目是更好的做法吗?或者可以在一个项目中完成所有工作?

标签: ruby-on-railsrubyweb-deployment

解决方案


application.html.erb文件被视为“布局”文件,<%= yield %>每个控制器都可以将页面内容插入到您的整体布局中。

通过简单地在旁边添加另一个文件,您可以拥有两个不同版本的东西application.html.erb,命名为website.html.erb. 现在,在您拥有的任何控制器中,您可以简单地添加到顶部,layout 'website'并且该控制器中的所有控制器操作都将使用website布局。

使用它,您可以做一些整洁的事情:

  • 有两种布局,一种用于您的应用程序(钱包应用程序本身),另一种用于您的网站(不需要用户帐户的公共页面)。每个布局可以包含不同的 CSS 和 JS
  • 创建一个类似于 的控制器static_pages_controller,它用于“静态”页面(不会根据用户而发生很大变化的页面)。对于您想要在网站上的每个页面,只需添加一个控制器操作和一个适当的模板。告诉这个控制器使用website上面的模板。
  • 因为您的静态页面通过 Rails,您甚至可以检查用户是否登录,并根据需要更改您的内容,因此您可以说“我的帐户”而不是“登录”

您可以在官方文档中阅读更多关于 Layouts 的信息。


推荐阅读