所以我想知道在Rails中做静态页面的最佳方法是什么,或者更确切地说是Rails 3.我总是对此有点困惑,就像我应该创建一个控制器一样?
Jai*_*yer 12
这取决于它们是否真的是静态的.您可以随时将页面添加到public/应用程序的目录中,它们也可以正常工作.他们甚至没有启动轨道或触摸路由引擎.
但是,网站上的大多数页面,包括静态页面,仍然需要使用网站的布局.您不希望分别更新几十页中的布局.在这种情况下,您可以创建一个"catchall"控制器.这是一个例子:
rails g controller site home about_us location
Run Code Online (Sandbox Code Playgroud)
然后,您可以将特定于页面的内容放入其中app/views/site/home.html.erb.
更新:您可以更进一步,通过调用缓存这些页面到caches_page控制器顶部附近:
class SiteController < ApplicationController
caches_page :home, :about_us, :location
end
Run Code Online (Sandbox Code Playgroud)
请注意,如果您有动态页面元素,例如根据用户是否已登录而更改的链接列表,则页面缓存不适合您.但是这个信息应该让你指向正确的方向.
您可以采取多种方法(它们并非都是好的方法).
public目录如果它是真正的静态,你可以把它放在public目录中.在物联网public目录将立即提供服务,而无需通过Rails栈去.
好处:
缺点:
link_to.app/views),现在他们在两个地方(app/views 和 public).这可能令人困惑.思考:我非常强烈地认为这些缺点超过了这里的优势.如果您希望以可读性和程序员的快乐为代价来提高速度,那么为什么首先使用Rails?
app/views并直接从路由器渲染这是可能的,以使从路由器的观点.但是,它肯定不是The Rails Way.
从路由官方RailsGuide:
1 Rails路由器的用途
Rails路由器识别URL并将它们分派给控制器的动作.
在架构上,将路由器映射直接映射到视图没有任何内在错误.许多其他框架都是这样做的.但是,Rails没有这样做,偏离已建立的约定可能会混淆其他开发人员.
我应该创建一个控制器吗?
除非你想采取上述方法之一 - 是的,你应该创建一个控制器.
那么问题就变成了控制器的名称.这个答案概述了一些选择.我会在这里列出一些想法.我还将添加其他三个选项.
ApplicationController# routes.rb
get "/about" to: "application#about"
# application_controller.rb
class ApplicationController < ActionController::Base
def about
render "/about"
end
end
# app/views/about.html.erb
Run Code Online (Sandbox Code Playgroud)
这里的优点是您不会通过创建新的控制器和文件夹来引入开销/膨胀.缺点是它不是The Rails Way.您创建的每个控制器都继承自ApplicationController.ApplicationController通常用于容纳您想要在所有其他控制器之间共享的功能.请参阅" 操作控制器概述导轨指南"中的此示例:
class ApplicationController < ActionController::Base
before_action :require_login
private
def require_login
unless logged_in?
flash[:error] = "You must be logged in to access this section"
redirect_to new_login_url # halts request cycle
end
end
end
Run Code Online (Sandbox Code Playgroud)
StaticController或StaticPagesControllerMichael Hartl受欢迎的Ruby on Rails Tutorial 使用了一个StaticPagesController.我同意我得到的来源,因为我不喜欢这种方法,因为页面通常不是静态的.
此外,存在混淆的可能性 - 为什么我们将其他静态视图放在单独的控制器中?不应该从StaticPagesController?呈现静态视图?我不认为混淆的可能性太高,但仍然想要注意它.
另请注意Hartl的脚注:
我们制作静态页面的方法可能是最简单的,但这不是唯一的方法.最佳方法真正取决于您的需求; 如果你期望大量的静态页面,使用静态页面控制器可能会非常麻烦,但在我们的示例应用程序中,我们只需要一些.如果您确实需要大量静态页面,请查看high_voltage gem.↑
PagesControllerRuby on Rails官方路由指南使用PagesController.我认为这种方法很好,但它根本不具有描述性.一切都是一页.这些页面与其他页面的区别是什么?
UncategorizedPagesController我会打电话给控制器UncategorizedPagesController,因为这正是它们的原因 - 未分类的页面.是的,打字和阅读有点麻烦.我更喜欢清晰而不是简洁的优点,但我可以理解选择更简洁,更合适PagesController或其他.
使用高电压,您无需执行写出路由和空控制器操作的繁琐工作:
# routes.rb
root 'pages#home'
get '/about', to: 'pages#about'
get '/contact', to: 'pages#contact'
get '/help', to: 'pages#help'
get '/terms-of-service', to: 'pages#terms_of_service'
get '/landing-page', to: 'pages#landing_page'
...
# pages_controller.rb
def PagesController > ApplicationController
def home
end
def about
end
def contact
end
def help
end
def terms_of_service
end
def landing_page
end
...
end
Run Code Online (Sandbox Code Playgroud)
您只需将页面添加到app/views/pages并链接到它们:<%= link_to 'About', page_path('about') %>.
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |