在Ruby on Rails中添加新页面

32

我对Ruby on Rails还比较陌生,目前遇到一个简单的问题。我的工作是在同事的应用程序中添加一个额外的页面,以向用户展示应用程序的功能。我已经编写了HTML和样式,但是不确定如何将其添加到Rails中并正确配置路由。希望能得到帮助!

2个回答

43

首先要确保您的同事没有创建处理静态页面的控制器。在app/controllers下查找类似于directories_controllerpages_controller等控制器。如果已经有了,那么按照您的同事已经设置的模式进行操作(此时您可能需要向他/她寻求指导)。如果没有这样的静态页面控制器,则按照以下建议操作。

您可以创建一个名为PagesController的控制器,定义与路由匹配的方法。例如,您的附加页面可能被称为“帮助”,在这种情况下,您可以定义如下控制器:

class PagesController < ActionController::Base
  def help
    # put any code here that you need 
    # (although for a static view you probably won't have any)
  end
end

然后您需要在app/views下创建一个名为pages的新文件夹,并将您的静态页面添加到此处(app/views/pages),使用.erb扩展名。使用.erb将允许您的新页面使用默认布局。

最后,您需要将此控制器添加到routes.rb中的(config/routes.rb),以告诉Rails在哪里查找/help页面:

match '/help' => 'pages#help'

最简单的方法是如何将样式表附加到这些页面? - pjmil
您可以像通常一样导入所有样式表,即使用<%= stylesheet_link_tag ..%>。 - Scott C Wilson
4
当运行 rails g controller pages 时,Rails 4 会抱怨 match 路由。但是 get '/about' => 'pages#about' 是可以工作的。 - dysbulic

19

静态页面

如果你的页面完全是静态的(没有任何动态内容),你可以将它们放在/public目录下,它们就可以直接访问了。

例如,在../public/help.html中的文件可以通过http://yourdomain.com/help.html进行访问。

半静态页面

如果你想使用你的布局但只提供静态内容,你可以创建一个控制器、路由和视图来实现这个功能,具体如下。

# static_controller.rb
class StaticController < ApplicationController
  def show
    render params[:page]
  end
end

# towards the end of routes.rb
get "/:page" => "static#show"

app/views/static 中创建您的视图。您可以只使用纯 html 或 erb 。名为 help.html.erb 的视图将可在 http://yourdomain.com/help 使用。

app/views/static 下创建的任何视图文件都无需修改路由或控制器即可使用。


太好了,如果我想让页面采用其他已有页面的 CSS 样式和规则,另外如果我还想将其添加到核心导航菜单中。是否也需要出于某种原因创建布局?非常抱歉问了这么多问题! - user595419
你不需要创建一个布局,但是你可能想要这样做,因为它很有用。如果你在布局中链接了你的CSS文件,它将自动应用于所有页面。 - edgerunner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接