Luc*_*uke 75 ruby ruby-on-rails
制作具有诸如的页面的Ruby on Rails应用程序的标准方法是什么?
如果有人有链接或答案而不是仅仅说使用宝石,我会想知道因为我想学习如何使用这种行为制作简单的webapps.
Jef*_*eff 112
取决于您希望如何处理这些页面中的内容.
方法#1 - 在视图中存储内容
如果您只想将所有内容放在ERB视图中,那么一个非常简单的方法是创建一个PagesController目的是处理静态页面.每个页面由控制器中的一个动作表示.
pages_controller.rb:
class PagesController < ApplicationController
def home
end
def about
end
def contact
end
end
Run Code Online (Sandbox Code Playgroud)
routes.rb中:
match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'
Run Code Online (Sandbox Code Playgroud)
然后在app/views/pages下创建home.html.erb,about.html.erb和contact.html.erb视图.这些视图包含您在静态页面上所需的任何内容.默认情况下,它们会使用您应用的application.html.erb布局.
您还需要查看页面缓存以提高性能.
方法#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
Run Code Online (Sandbox Code Playgroud)
pages_controller.rb:
class PagesController < ApplicationController
def show
@page = Page.find(params[:id])
render 'shared/404', :status => 404 if @page.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
show.html.erb:
<%= raw @page.content %>
Run Code Online (Sandbox Code Playgroud)
routes.rb中:
match '/:id' => 'pages#show'
Run Code Online (Sandbox Code Playgroud)
注意:将此条目放在routes.rb的末尾,因为它匹配所有内容.
那么你想要如何创建,编辑和更新页面取决于你 - 你可以拥有一个管理界面,或者以某种方式将它构建到你的公共界面.这种方法也可以从页面缓存中受益.
Max*_*ick 24
另一种选择是high_voltagegem:https://github.com/thoughtbot/high_voltage
这使得创建静态页面变得非常容易,其中内容存储在视图中.
Ric*_*nes 14
Jeff的方法#1(在视图中存储内容并为每个静态页面设置路由和控制器操作)是一个很好的方法.我唯一要补充的是在你的路线中使用controller宏.
所以,而不是这个:
match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
controller :pages do
get :home
get :about
get :contact
end
Run Code Online (Sandbox Code Playgroud)
这是两条额外的线条,但更加优雅,因为它消除了重复,并将您的静态页面路径组合在一起.
它还使用gethttp动词方法代替match,这是Rails路由的一种更好的做法(更简洁,现在Rails 4要求在使用时指定http动词match.
查看Michael Hartl的http://railstutorial.org ,其中包含2.3.8和3.0.x版本.它通过很好的例子来介绍它,并引导您在很早的时候构建它们,并且您还将有机会比这个例子学到更多东西.我强烈推荐它.
杰夫的方法#1对我很有用.这是让控制器动态查找页面的技巧.这样,您无需触摸控制器,也无需使用routes.rb来添加页面.只需将页面放在app/views/pages下,控制器就会找到它.
class PagesController < ApplicationController
def show
render params[:id]
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32228 次 |
| 最近记录: |