Ruby on Rails中的静态页面

时间:2010-12-18 17:41:56

标签: ruby-on-rails ruby

制作具有

等页面的Ruby on Rails应用程序的标准方法是什么?
  • 主页
  • 关于
  • 联系

如果有人有链接或答案而不是仅仅说使用宝石,我会说,因为我想学习如何使用这种行为制作简单的webapps。

9 个答案:

答案 0 :(得分:112)

取决于您希望如何处理这些页面中的内容。

方法#1 - 在视图中存储内容

如果您只想将所有内容放在ERB视图中,那么一个非常简单的方法是创建一个PagesController,其目的是处理静态页面。每个页面由控制器中的一个动作表示。

pages_controller.rb:

class PagesController < ApplicationController
  def home
  end

  def about
  end

  def contact
  end
end

routes.rb中:

match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'

然后在app / views / pages下创建home.html.erb,about.html.erb和contact.html.erb视图。这些视图包含您在静态页面上所需的任何内容。他们默认使用您应用的application.html.erb布局。

您还需要调查page caching以提升自己的表现。


方法#2 - 在数据库中存储内容

我使用的另一种方法是为静态页面创建一个非常基本的CMS。在这种情况下,页面在模型中表示。它使用friendly_id gem来处理每个页面的slug,以便可以通过URL中的漂亮名称(例如/ about)而不是ID来检索它们。

page.rb:

class Page < ActiveRecord::Base
  attr_accessible :title, :content

  validates_presence_of :title, :content

  has_friendly_id :title, :use_slug => true, :approximate_ascii => true
end

pages_controller.rb:

class PagesController < ApplicationController
  def show
    @page = Page.find(params[:id])
    render 'shared/404', :status => 404 if @page.nil?
  end
end

show.html.erb:

<%= raw @page.content %>

routes.rb中:

match '/:id' => 'pages#show'

注意:将此条目放在routes.rb的末尾,因为它匹配所有内容。

然后,您希望如何创建,编辑和更新页面 - 您可以拥有管理界面,或以某种方式将其构建到您的公共界面。这种方法也可以从页面缓存中受益。

答案 1 :(得分:24)

另一个选项是high_voltage gem:https://github.com/thoughtbot/high_voltage

这使得创建静态页面变得非常容易,其中内容存储在视图中。

答案 2 :(得分:14)

Jeff的方法#1(在视图中存储内容并为每个静态页面设置路由和控制器操作)是一个很好的方法。我要添加的唯一内容是在您的路线中使用controller macro

所以,而不是:

match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'

你可以这样做:

controller :pages do
  get :home
  get :about
  get :contact
end

这是两条额外的线条,但更加优雅,因为它消除了重复,并将您的静态页面路线组合在一起。

它还使用get http动词方法代替matchwhich is a better practice for Rails routes(更简洁,现在Rails 4 requires the http verb to be specified when using match

答案 3 :(得分:6)

查看Michael Hartl的http://railstutorial.org 它有2.3.8和3.0.x版本。它通过很好的例子来介绍它,并引导您在很早的时候构建它们,并且您还将有机会比这个例子学到更多东西。 我强烈推荐它。

答案 4 :(得分:6)

杰夫的方法#1对我很有用。这是让控制器动态查找页面的技巧。这样,您无需触摸控制器,也无需使用routes.rb来添加页面。只需将页面放在app / views / pages下,控制器就可以找到它。

class PagesController < ApplicationController
  def show
    render params[:id]
  end
end

答案 5 :(得分:2)

配置/ routes.rb中

get ':id', to: 'pages#show'

应用程序/控制器/ pages_controller.rb

class PagesController < ApplicationController
  def show
    begin
      render params[:id]
    rescue ActionView::MissingTemplate
      render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
    end
  end
end

然后将静态页面放在app / views / pages / {name} .html.erb(或任何模板格式)中。

答案 6 :(得分:1)

您可以使用Jekyll bootstrapJekyll using Danger blog

创建静态页面

参考它非常有帮助。

答案 7 :(得分:0)

对你的问题的充分答案基本上看起来像Rails框架的介绍:MVC结构,模板和至少路由DSL。杰夫给了一个很好的刺,但他的回答仍然假设你有很多基本的Rails知识。

我建议,如果你的webapp真的那么简单,Rails可能会有点过分。我会研究更轻松的东西,比如Sinatra,它的学习曲线比Rails低得多,并且在不必处理复杂路由,魔术MVC动作/模板映射等的情况下做得很好。

答案 8 :(得分:0)

我建议您在公共文件夹中添加您的页面,以便直接提供,而不必通过rails。我不是专家,所以如果页面是静态的,我不确定这是否有任何缺点。