Rails 中脚手架和模型的区别

2024-01-15

在 Rails 中生成脚手架和生成模型有什么区别?这样做的优点/缺点是什么?


当您生成模型时,您会获得一个模型以及一些相关组件。我最喜欢的解释此类主题的方法之一是实际尝试或鼓励其他人尝试,所以如果我输入命令rails generate model Foo name:string description:text在 Rails 项目中,我会得到:

invoke  active_record
  create    db/migrate/20130719012107_create_foos.rb
  create    app/models/foo.rb
  invoke    test_unit
  create      test/unit/foo_test.rb
  create      test/fixtures/foos.yml

第一行调用Active Record,它基本上将您的模型与数据库联系起来。下一行创建所谓的迁移文件。迁移文件包含更改数据库的说明。第一个迁移文件创建名为“foos”的数据库表,并且还将创建“名称”和“描述”列。

下一行制作模型本身。该模型基本上是一个继承自 Active Record 的 Ruby 类。这意味着可以在 Active Record 中调用的任何方法现在都可以在您的模型中调用。最后三行基本上为您的模型创建相关的测试文件。如果您使用 RSpec,则会创建规范文件。

如果您的 Rails 应用程序仅包含模型,那么您将不会有任何类型的在页面上显示信息的视图,也不会具有控制信息流的指令。您的选择是还生成控制器(进而生成您的视图)或生成支架,它生成您的模型、视图、控制器并写入您的routes.rb 文件。如果我跑了rails generate scaffold foo我会得到:

invoke  active_record
  create    db/migrate/20130719013307_create_foos.rb
  create    app/models/foo.rb
  invoke    test_unit
  create      test/unit/foo_test.rb
  create      test/fixtures/foos.yml
  invoke  resource_route
   route    resources :foos
  invoke  scaffold_controller
  create    app/controllers/foos_controller.rb
  invoke    erb
  create      app/views/foos
  create      app/views/foos/index.html.erb
  create      app/views/foos/edit.html.erb
  create      app/views/foos/show.html.erb
  create      app/views/foos/new.html.erb
  create      app/views/foos/_form.html.erb
  invoke    test_unit
  create      test/functional/foos_controller_test.rb
  invoke    helper
  create      app/helpers/foos_helper.rb
  invoke      test_unit
  create        test/unit/helpers/foos_helper_test.rb
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/foos.js.coffee
  invoke    scss
  create      app/assets/stylesheets/foos.css.scss
  invoke  scss
 identical    app/assets/stylesheets/scaffolds.css.scss

回答你的问题,脚手架的优点是它快速、简单,并且一切都是为你预先配置的。然而,独立于脚手架生成模型(然后在需要时生成控制器/视图并自己编写routes.rb文件)的优点是,您可以更好地控制应用程序及其外观和功能,从而避免不必要的代码,您可以采用行为驱动开发或测试驱动开发,以及其他人可能想要添加的其他内容。

我的最后一点建议是:Rails 非常用户友好,所以请尝试自己尝试。您可以撤消任何generate命令与相应的destroy命令,例如rails destroy scaffold Foo将删除由rails generate Scaffold Foo name:string description:string,因此您不必担心实验会导致项目不可挽回地混乱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 中脚手架和模型的区别 的相关文章

  • 如何阻止 Django 中发生级联删除?

    我的 Django 应用程序中有三个模型类 class Folder models Model folder models ForeignKey Folder null True blank True related name folder
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • 如何在 Ruby on Rails 中不使用 eval 将字符串转换为哈希值? [复制]

    这个问题在这里已经有答案了 这里是string需要转换成hash status gt label gt Status collection gt return misc definitions project status 我们不能使用ev
  • 在 Rails 6 上定义 Secret_key_base 的正确方法是什么?

    正确的定义方式是什么secret key base既然我们已经有了每个环境的凭据 就可以在 Rails 6 上使用了吗 我的环境有变量SECRET KEY BASE但 Rails 并没有接受它 我尝试定义secret key base in
  • MONGODB [DEBUG] 游标的cursor.refresh() 7078636577051629992

    更新大型 json 列表时 出现以下错误 2012 04 01T09 34 00 00 00 app run 1 MONGODB DEBUG cursor refresh for cursor 7078636577051629992 201
  • Ruby on Rails - 设计注册链接不起作用 - 未定义方法“user_registration_path”

    这个问题之前已经报告过 但我仍然无法找到解决方案 我已将插件 Devise 安装到我的新 RoR 项目中 当我点击注册链接时 我被重定向到以下路线 http localhost 3000 users registration sign up
  • Rails 4 i18n,如何转换子域用于区域设置的路由

    我正在使用子域来确定 Rails 4 网站中的区域设置 我完全按照我想要的方式使用区域设置切换器 但现在我需要翻译路线 并且我不确定继续的最佳方法 我看过https github com kwi i18n routing https git
  • Rails 4 - 如何链接到 PDF 文件(名称.PDF)?

    我正在生成 PDF 文件 我的链接如下所示 当我点击这个时 它会带我去 display invoice 123456789 这是一个 HTML 版本 在控制器中的操作如下 def display invoice if params invo
  • 如何在 Rails 3.2.1 版本中注释 Rails 模型

    我正在尝试遵循一些在线教程来在 Rails 中注释我的模型 然而 似乎所有教程都在谈论过时的注释版本或不正确的安装 这真是一团糟 到目前为止我已经尝试过以下方法 1 在 Gemfile 中添加此内容 gem annotate 2 4 0 2
  • Rails:format.js 或 format.json,或两者?

    可能很明显 但我仍然缺乏基本知识 那么在控制器内部 两者都可以使用 还是总是 Javascript 所以两者是相同的 json and js是两种不同类型的响应 它们在 Rails 中被定义为不同的 MIME 类型 Mime Type re
  • 获取设备中的当前用户ID

    如何使用设备获取控制器中的当前用户 ID 在我的控制器中我有这样的东西 def index me current user c User find me sheets c time sheets end 我收到一条错误消息 无法找到没有 I
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • Heroku 部署错误

    在 Windows 环境中 尝试部署到 Heroku 时出现以下错误 C Ruby lib ruby gems 1 8 gems heroku 1 9 13 lib heroku commands base rb 32 in 没有这样的文件
  • 仅删除多对多关系

    我有一个 has and belongs to many friends join table gt friends peoples 要添加朋友 我会这样做 people followers lt lt friend这会创建关系和新的个人资

随机推荐