如何向Rails Spree Commerce应用程序添加额外的菜单项和视图

时间:2014-01-18 13:10:09

标签: ruby-on-rails ruby git spree

我有一个标准的Ruby on Rails Spree Commerce应用程序,并设法使用Capistrano进行部署。现在我想在我的左上角菜单中添加一个额外的页面,显示为“关于”。

我还不太了解Rails是如何工作的。我的一个朋友说Rails基本上从git中获取所有东西,如果你想要做出不同的东西,你必须制作覆盖或额外的页面。

所以编辑“主”布局页面(类似于ASP.NET的MVC4)不是我想添加菜单项的选项。除此之外,我需要一个控制器和视图。

guide说我应该执行以下操作:

创建所需的控制器和视图目录:

mkdir -p app/controllers/spree
mkdir -p app/views/spree/about

接下来,在我们刚刚创建的目录中创建一个名为about_decorator.rb的新文件:

module Spree
  AboutController.class_eval do
    [Model parts I want to send to the view]

  end
end

我们还需要在config / routes.rb文件中添加一个指向此操作的路由。我们现在就这样做。更新路由文件以包含以下内容:

Spree::Core::Engine.routes.draw do
  get "/about" => "about"
end

我想知道的是Rails是如何工作的(我朋友关于git和覆盖的故事是真的吗?)以及关于网站本身:如何在菜单中建立链接以及如何调整页面并向其添加内容。< / p>

我希望有人可以提供一些见解,链接和/或解释!

1 个答案:

答案 0 :(得分:2)

Rails如何工作

这将是MVC的简单解释,以及框架的基本内部。

MVC

模型 - 模型只是应用程序的数据。不需要数据库,但在rails世界中,模型通常连接了一些数据库。

查看 - 视图严格来说是用户看到的内容。视图中应该有很少的逻辑。只有被视为“视图逻辑”的东西。这是一个简单的检查,以查看用户是否已登录,因此您应显示其名称或登录按钮。虽然,有些人会争辩说把它放到视图助手那里。无论哪种方式,您都不应该在视图中进行计算。这就是模型的重点。

控制器 - 控制器应该是一个非常薄的层,只能抓取请求所需的信息。在这种情况下,请求是单页面视图。

rails开发人员之间有一个共同的思维过程,那就是“瘦控制器,胖模型”。这基本上表明您的控制器应该非常小。大多数应用程序逻辑应该包含在模型中,只留下控制器中的请求信息。

注意:您的模型应该不了解您的观点,您的观点不应该对您的模型有任何了解。这意味着,您的观点永远不会直接使用您的模型。

基本内部

config/routes.rb - 是一个描述应用程序中所有路由的文件。路由类似http://example.com/users/1,很可能指向用户个人资料。路由用于让应用程序知道每个请求使用哪些控制器,方法和名称。

rake routes - rake是一个命令行工具,在ruby应用程序中很常见。它允许您创建任务并执行它们。在这种情况下,routes任务会解析整个config/routes.rb文件,并告诉您应用程序中可用的路由以及为每条路由指定的相应名称。

部分视图 - 简单地说,部分视图只是视图的一部分。这是常见的事情,特别是对于可以在单个应用程序的多个页面上使用的表单。使用partials的原因通常是通过您的视图删除重复。所有部分视图都以_为前缀命名。因此,它可能类似于_navigation.html.erb_form.html.haml。 (erb和haml是两种常见的HTML呈现引擎)。

回答您的问题

将项目添加到导航栏

将项目添加到导航栏与在ASP应用程序中编辑“母版页”非常相似。您只需要找到需要编辑的部分。在您的视图中,按照<%= render :partial => 'spree/shared/header' %>声明,直到找到您需要编辑的文件。注意,如果这是您需要遵循的实际文件,我不是肯定的,请查看spree_application.html.erb文件以查看您需要关注的文件。该文件实质上与您习惯使用的“母版页”相同。

能够实际使用新链接

您需要创建一个新的控制器,或者如果已经有一个适合您尝试完成的任务,您可以在该控制器中创建一个新方法。

如果您需要操作或显示某些数据,您还需要一个模型。您可以创建一个,也可以只使用任何负责您已有数据的文件。

您需要在routes.rb文件中添加路线,以便您的应用知道要使用哪个controller#method

运行rake routes将为您提供有关刚刚添加的新路线的信息。请注意,如果您有一条名为user_profile的路线,您将获得便利方法,以便您轻松链接到路线。您可以使用user_profile_pathuser_profile_url来建立链接。我建议使用*_path在您自己的网站上建立链接,因为它使用相对路径/user/1而不是http://example.com/user/1*_url会给后者。通常只有在使用某种形式的API时才使用*_url,并希望将链接发回给您的应用程序。