制作具有
等页面的Ruby on Rails应用程序的标准方法是什么?如果有人有链接或答案而不是仅仅说使用宝石,我会说,因为我想学习如何使用这种行为制作简单的webapps。
答案 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动词方法代替match
,which 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 bootstrap或Jekyll using Danger blog
创建静态页面参考它非常有帮助。
答案 7 :(得分:0)
对你的问题的充分答案基本上看起来像Rails框架的介绍:MVC结构,模板和至少路由DSL。杰夫给了一个很好的刺,但他的回答仍然假设你有很多基本的Rails知识。
我建议,如果你的webapp真的那么简单,Rails可能会有点过分。我会研究更轻松的东西,比如Sinatra,它的学习曲线比Rails低得多,并且在不必处理复杂路由,魔术MVC动作/模板映射等的情况下做得很好。
答案 8 :(得分:0)
我建议您在公共文件夹中添加您的页面,以便直接提供,而不必通过rails。我不是专家,所以如果页面是静态的,我不确定这是否有任何缺点。