解决方法
1 – 公共目录
如果它真的是静态的,你可以把它放在公共目录中.公共目录中的东西将立即提供,而不必通过Rails堆栈.
优点:
>因为它不必浪费时间通过Rails堆栈,客户端将收到更快的响应.
缺点:
>您将无法使用您的网站布局.或查看像link_to
这样的助手.
而不是你的意见在一个地方(app / views),现在他们在两个地方(app / views和public).这可能令人困惑.
想法:我非常强烈地认为,缺点超过了这里的优势.如果您希望以可读性和程序员的幸福为代价,轻率地提高速度,为什么首先使用Rails?
2 – 放置在应用程序/视图中,直接从路由器渲染
从路由器渲染视图是possible.但是,这绝对不是Rails的方式.
1 The Purpose of the Rails Router
The Rails router recognizes URLs and dispatches them to a controller’s action.
在建筑上,将路由器直接映射到视图并没有任何内在的错误.许多其他框架都是这样做的.但是,Rails不这样做,偏离既定惯例可能会混淆其他开发者.
like should I create a controller or not?
除非你想采取上述方法之一 – 是的,你应该创建一个控制器.
那么问题就会成为控制器的名字.这个答案概述了一些选择.我会在这里列出一些想法.我还会添加另外三个选项.
3 – 使用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
这里的优点是您不会通过创建一个新的控制器和文件夹来引入开销/膨胀.缺点是它不是Rails的方式.您创建的每个控制器都将继承自ApplicationController. ApplicationController通常用于容纳您希望在所有其他控制器之间共享的功能.从Action Controller Overview Rails Guide看这个例子:
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
4 – StaticController或StaticPagesController
Michael Hartl的热门Ruby on Rails教程uses一个StaticPagesController.我同意source我得到这个,因为我不喜欢这种方法,因为页面通常不是静态的.
另外,有可能混淆 – 为什么我们把其他静态视图放在单独的控制器中?静态视图不应该从StaticPagesController呈现?我不认为混淆的可能性太高,但还是想注意.
另请注意Hartl的footnote:
Our method for making static pages is probably the simplest,but it’s not the only way. The optimal method really depends on your needs; if you expect a large number of static pages,using a Static Pages controller can get quite cumbersome,but in our sample app we’ll only need a few. If you do need a lot of static pages,take a look at the high_voltage gem. ↑
5 – PagesController
官方的Ruby on Rails routing guide使用PagesController.我认为这种方法是好的,但它根本不是描述性的.一切都是一个页面.这些页面与其他页面有何区别?
我会调用控制器UncategorizedPagesController,因为这正是他们的 – 未分类的页面.是的,输入和阅读有点麻烦.我更喜欢简洁明了的优点,但我可以理解选择更简洁,并与PagesController或其他东西一起去.
7 – 高压宝石
使用High Voltage,您无需做冗长乏味的写作路线和空控制器操作:
# 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
您只需将页面添加到app / views / pages并链接到:<%= link_to'About',page_path('about')%> ;.