Ruby on Rails中的静态页面

Ruby on Rails应用程序的标准方式是什么?

  • 关于
  • 联系

我会appricate如果有人有链接或答案,而不只是说使用gem,因为我想学习如何使这样的行为简单的webapps。

取决于你想如何处理这些页面中的内容。

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

如果你只是想把所有的内容放在ERB视图中,那么一个非常简单的方法就是创build一个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下创buildhome.html.erb,about.html.erb和contact.html.erb视图。 这些视图包含您想要在静态页面上的任何内容。 他们将默认使用您的应用程序的application.html.erb布局。

你也想看看页面caching ,以提高自己的performance。


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

我使用的另一种方法是为静态页面创build一个非常基本的CMS。 在这种情况下,页面在模型中表示。 它使用friendly_id gem来处理每个页面的slu so,以便可以通过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的末尾,因为它匹配所有的东西。

那么你想如何创build,编辑和更新页面取决于你 – 你可以有一个pipe理界面,或者以某种方式构build到你的公共接口。 这种方法也可以从页面caching中受益。

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

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

Jeff的方法#1(将内容存储在视图中,并为每个静态页面分配一个路由和控制器操作)是一个很好的select。 我唯一要添加的是在你的路线中使用controllermacros 。

所以,而不是这个:

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

你可以这样做:

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

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

它也使用get http动词方法而不是match , 这对Rails路由来说是一个更好的做法 (更简洁,现在Rails 4需要在使用match时指定http动词 。

杰夫的方法#1对我很好。 这是一个让控制器dynamic查找页面的技巧。 有了这个,你不需要触摸控制器,也不需要routes.rb来添加页面。 只要将这些页面放在app / views /页面下,控制器就会find它。

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

查看Michael Hartl的http://railstutorial.org ,它有2.3.8和3.0.x版本。 它通过很好的例子来说明这个问题,并且很早就引导你进行构build,你也将有机会比这个例子学到更多的东西。 我强烈推荐它。

configuration/ 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(或者其他的模板格式)中。

要了解更多,您可以使用Jekyll bootstrap创build静态页面,也可以使用Danger博客的 Jekyll创build静态页面

请参阅它是非常有帮助的。

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

我build议虽然,如果你的web应用程序真的很简单,Rails可能是矫枉过正。 我会考虑更轻一点的东西,像Sinatra ,它比Rails的学习曲线要​​低得多,并且不需要处理复杂的路由,魔术MVC动作/模板映射等等,这样的事情也很出色。

我build议添加您的网页在公共文件夹,以便直接服务,而不必通过铁路。 我不是一个专家,所以我不确定这是否有任何缺点,如果该网页是静态的。