gpt4 book ai didi

ruby-on-rails - Rails 中的静态页面?

转载 作者:行者123 更新时间:2023-12-03 20:06:31 27 4
gpt4 key购买 nike

所以我想知道在 Rails 中做静态页面的最佳方法是什么,或者更确切地说是 Rails 3。我一直对此有点困惑,比如我是否应该创建一个 Controller ?

最佳答案

您可以采用多种方法(它们并非都是好方法)。
1 - public目录
如果它真的是静态的,你可以把它放在 public目录。 public 中的东西目录将立即提供,无需通过 Rails 堆栈。
好处:

  • 因为不必浪费时间通过 Rails 堆栈,客户端将收到更快的响应。

  • 缺点:
  • 您将无法使用您的网站布局。或查看 link_to 等助手.
  • 而不是您的 View 在一个地方( app/views ),现在它们在两个地方( app/viewspublic )。这可能会令人困惑。

  • 想法:我非常强烈地感觉到这里的劣势超过了优势。如果您希望以牺牲可读性和程序员的快乐为代价来稍微提高速度,那么为什么首先要使用 Rails?
    2 - 放入 app/views并直接从路由器渲染
    possible从路由器渲染 View 。但是,它绝对不是 Rails 方式。
    来自官方 RailsGuide on routing :

    1 The Purpose of the Rails Router

    The Rails router recognizes URLs and dispatches them to a controller's action.


    在架构上,将路由器直接映射到 View 本身并没有任何问题。许多其他框架就是这样做的。然而,Rails 并没有这样做,并且偏离既定惯例可能会使其他开发人员感到困惑。

    like should I create a controller or not?


    除非您想采用上述方法之一 - 是的,您应该创建一个 Controller 。
    那么问题就变成了如何命名 Controller 。这个答案概述了一些选项。我会在这里列出一些想法。我还将添加其他三个选项。

    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
    这里的优点是您不会通过创建新的 Controller 和文件夹来引入开销/膨胀。缺点是它不是 Rails 方式。您创建的每个 Controller 都继承自 ApplicationController . ApplicationController通常用于容纳您希望在所有其他 Controller 之间共享的功能。请参阅 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 - StaticControllerStaticPagesControllerMichael Hartl 的流行 Ruby on Rails 教程 uses一个 StaticPagesController .我同意 source我从我不喜欢这种方法中得到这个,因为页面通常不是静态的。
    此外,还有可能造成混淆——为什么我们将其他静态 View 放在单独的 Controller 中?不应该从 StaticPagesController 呈现静态 View 吗? ?我不认为混淆的可能性太高,但还是想注意一下。
    另请注意 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 .我认为这种方法很好,但它根本不是描述性的。一切都是一页。这些页面与其他页面的区别是什么?
    6 - UncategorizedPagesController我会调用 Controller UncategorizedPagesController ,因为这正是它们的本质 - 未分类的页面。是的,打字和阅读有点麻烦。我更喜欢清晰而不是简洁的优势,但我可以理解选择更简洁并选择 PagesController , 或者是其他东西。
    7 - 高压 gem
    High Voltage ,您不必做繁琐的写出路线和空 Controller 操作的工作:
    # 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') %> .

    关于ruby-on-rails - Rails 中的静态页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992760/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com