【问题标题】:Issue with controller generation in railsRails 中的控制器生成问题
【发布时间】:2013-06-11 19:29:59
【问题描述】:

Ruby on Rails 的新手,所以这可能是一个愚蠢的问题。我有一个应用程序,我可以毫无问题地捆绑我的宝石。所以现在我想添加一些主要是静态页面。我尝试使用 rails generate controller MostlyStatic page1 page2 为他们生成一个控制器。这应该生成一个名为 most_static 的控制器和名为 page1 和 page2 的页面。相反,我抛出一个错误。显然,生成命令正在尝试连接到我尚未创建的数据库。这些页面中没有任何内容应该是数据库表,所以我有点困惑为什么要在这个时刻将数据库引入进程。我浏览了各种教程,没有人说需要数据库来为静态页面生成控制器。所以......我错过了什么?我是否需要先创建数据库才能生成静态页面?如果是这样,随后删除该代创建的任何表会损害我的应用程序的功能吗?我真的不想要一堆无用的静态页面表。有没有办法在没有数据库的情况下生成这些页面和控制器?

【问题讨论】:

    标签: ruby-on-rails controller


    【解决方案1】:

    您没有遵循生成控制器的约定。生成控制器不会创建数据库表。你必须通过调用rails generate modelrails generate resourcerails generate scaffold 来做到这一点。

    因此,您需要一个用于几个静态页面的控制器。试试这个

    rails generate controller static_pages home help contact
    

    请注意生成器是复数和蛇形大小写(static_pages)。这将生成静态控制器和home.html.erbhelp.html.erbcontact.html.erb 页面

    现在您可以在控制器中使用这些操作访问页面

    def home
    end
    
    def help
    end
    
    def contact
    end
    

    还需要确保路由设置好

    # routes.rb
    
    match '/home',    to: 'static_pages#home'
    match '/help',    to: 'static_pages#help'
    match '/contact',    to: 'static_pages#contact'
    

    没有设置数据库,您可以访问这些页面。这就是你需要做的所有事情。只需遵循约定,例如复数控制器和单数模型,并且 rails 负责处理细节。希望这能让你开始

    更新

    响应 cmets 这里是生成控制器的标准输出。请注意,我的示例使用 haml 而不是 erb,但输出中没有与数据库相关的任何内容。

    rails g controller static_pages home help contact
      create  app/controllers/static_pages_controller.rb
       route  get "static_pages/contact"
       route  get "static_pages/help"
       route  get "static_pages/home"
      invoke  haml
      create    app/views/static_pages
      create    app/views/static_pages/home.html.haml
      create    app/views/static_pages/help.html.haml
      create    app/views/static_pages/contact.html.haml
      invoke  rspec
      create    spec/controllers/static_pages_controller_spec.rb
      create    spec/views/static_pages
      create    spec/views/static_pages/home.html.haml_spec.rb
      create    spec/views/static_pages/help.html.haml_spec.rb
      create    spec/views/static_pages/contact.html.haml_spec.rb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
      invoke    rspec
      create      spec/helpers/static_pages_helper_spec.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/static_pages.js.coffee
      invoke    scss
      create      app/assets/stylesheets/static_pages.css.scss
    

    【讨论】:

    • 虽然我非常感谢您尝试提供帮助,但您在这里所说的大部分内容并不准确。您可以使用骆驼案例或蛇案例来生成控制器,即使生成的控制器将是蛇案例。至于尝试 [code] rails generate controller static_pages home help contact [/code],这基本上是我首先尝试的。在完全尝试之后,我仍然得到数据库错误。我找不到任何参考说明,但在控制器之前的新版本 Rails 中必须有一些关于数据库的规则。
    • 作为我关于骆驼案与蛇案的参考,请参阅此 Mike Hartl 指南的第 3.4 节,这应该是最好的。尽管我承认在本指南中,实际上在本节中,他说要在数据库之前生成静态页面控制器,这显然是行不通的。无论如何,这是链接。 ruby.railstutorial.org/chapters/static-pages#sec-static_pages
    • 我实际上以该教程为例来向您展示如何生成静态页面。生成控制器与数据库无关。静态页面的重点是它们不是从数据库中持久化数据。它们是静态的。他们不会改变。我认为您正在混淆控制器和模型。如果您需要一个数据库表,只需生成一个具有相同名称的控制器(复数)和一个模型(单数)。或者使用rails generate scaffold 一步完成。我的回答中的信息没有任何问题。只是提供我的帮助,不应该被否决。
    • 不难,但这是按照您的建议运行命令的确切结果:rails generate controller static_pages home help contact /home/usr/.rvm/gems/ruby-2.0.0- p195/gems/mysql2-0.3.11/lib/mysql2/client.rb:44:in `connect': 拒绝用户 'root'@'localhost' 访问(使用密码:否)(Mysql2::Error)。其次是大约 30 行其他数据库错误。显然需要数据库来生成控制器,不是吗?
    • 不,无论数据库错误发生了什么,我都不确定。请参阅我的更新答案。我从未见过生成控制器时出现这种错误。它必须与您的设置有关。您可以使用 rails destroy 命令删除之前生成的任何内容。另外作为建议,在学习 Rails 时,请坚持使用默认的 sqlite 数据库。它将让您专注于学习 Rails,而不是在尝试学习时与数据库争吵。只是友好的建议。发布另一个有关堆栈跟踪的问题以及您在做什么,以便我们提供帮助
    【解决方案2】:

    对于任何遇到这个问题的人来说,正确的答案是数据库不需要存在,但它必须正确配置,就好像它确实存在于配置文件中一样。生成控制器实际上并不创建数据库。

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多