当前位置: 首页 > 科技观察

专攻疑难问题:Rails、MVC和最常用的Rails命令

时间:2023-03-14 11:44:50 科技观察

本文转载自公众号《读芯》(ID:AI_Discovery)。在用Ruby编写Web应用程序时,创始人DavidHeinemeierHansson说他只是将以前应用程序的通用部分复制并粘贴到新应用程序中。包括他在内的所有程序员都喜欢解决难题。尝试解决工作领域特有挑战的唯一方法是构建一个抽象层,并清除有关底层Web程序的所有细节。使用Rails可以让您专注于困难的部分并减少重复性工作。Rails命令很神奇,但是我们必须了解每条命令的作用和编写过程。什么是Rails?Rails是一个Web应用程序框架。它包括根据模型-视图-控制器(MVC)模式创建数据库支持的Web应用程序所需的一切。MVC将应用程序分为三层:模型、视图和控制器,每一层都有特定的任务。Model-View-Controller(MVC)SchematicDiagramModelLayer模型层代表领域模型(如Account、Product、Person、Post等),勾勒出应用程序中独特的业务逻辑。在Rails中,数据库支持的模型类派生自ActiveRecord::Base。ActiveRecord支持用户将数据库行的数据表示为对象,并用业务逻辑方法装饰这些数据对象。大多数Rails模型都由数据库支持,模型也可以是常规的Ruby类或实现由ActiveModel模块提供的一组接口的Ruby类。控制层控制层的功能是处理传入的HTTP请求并给出适当的响应。通常这一层意味着返回HTML,但Rails控制器也可以生成XML、JSON、PDF、特定于移动设备的视图和其他格式。控制器加载和操作模型,并呈现视图模板,以便生成适当的HTTP响应。在Rails中,传入的请求由ActionDispatch发送到相应的控制器,控制类来自ActionController::Base。ActionDispatch和ActionController在ActionPack中绑定在一起。图片来源:unsplash视图层视图层由主要负责提供应用程序资源的适当描述的“模板”组成。模板可以采用多种格式,但大多数视图模板都是嵌入了Ruby代码的HTML(ERB文件)。视图通常生成控制器响应,或生成电子邮件文本。在Rails中,视图生成由ActionView处理。开发新的Rails应用程序首先要从头开始构建应用程序,确保系统上安装了Ruby、RubyGems和Bundler。打开终端并导航到您有权创建文件的目录。首先要做的是安装Rails并通过运行railsnew命令构建一个新的Rails应用程序。要从头开始创建仅API的Rails,请在Rails应用程序名称后创建--api:railsnew--database=postgresql--api(使用Postgresql数据库配置应用程序更容易,但不要忘记挂载它运行命令之前的数据库)。例如:railsnewGallery--database=postgresql--api。通过使用--api标志,Rails能够删除许多默认功能和中间件(主要涉及无用的浏览器)。控制器继承自ActionController::API而不是ActionController::Base,生成器将跳过生成视图。为仅API的Rails构建设置资源不需要任何更改。将所有必需的gem添加到Gemfile后运行bundleinstall。初始化数据库:railsdb:create运行Rails服务器:railssRailsbuildRails团队的主要目标是高效构建核心应用程序功能。Rails系统有大量的生成器,可以帮助用户完成一些手动任务。除了节省时间之外,生成器还有一些其他优点:生成器可以为应用程序测试套件设置基本规范。他们为用户提供一些基本的例子,而不是编写复杂的逻辑测试。设置后,生成器将以相同的方式运行,从而标准化代码并帮助用户更高效地开发,因为他们不必担心拼写、语法错误或手动编写代码时可能出现的其他相关错误。生成器遵循Rails最佳实践,包括使用RESTful命名模式、删除重复代码、使用部分和许多其他一流的设计模式。但是,一些生成器会创建相当多的代码。如果不使用某个代码,则会在应用程序代码中造成不必要的混乱,从而使未来的程序员感到困惑。那么什么时候最好使用发电机呢?所有Rails生成器都作为命令输入终端并遵循以下语法:railsgenerate--no-test-framework--no-test-frameworkisaflag,旨在提醒生成器不要为创建任何测试新生成的模型和控制器等。当用户运行自己的Rails应用程序时,不需要任何标志,这对于快速构建测试套件非常有帮助。Rails为了提高效率,将generate方法简化为g,所以上面的CLI命令可以简化为:railsg--no-test-framework来源:unsplash以下是Rails提供的主要生成器.笔者将分别举例说明:MigrationGeneratorRails有一套高质量的符合规范的迁移生成器,可以有效管理数据库schema。绘制域模型后,您可以继续下一步。首先在案例库应用程序中使用数据库迁移并更新画家表。使用以下命令向表中添加一列并将其命名为portrait:railsgmigrationadd_portrait_to_paintersportrait:string--no-test-framework终端显示迁移文件20200928055457_add_portrait_to_painters.rb。被创建。由于迁移文件名不能重复,因此生成器会在文件名前加上时间戳。奇迹发生了——打开在db/migrat目录中创建的文件,它现在看起来应该是这样的:classAddPortraitToPainters"doesnotexist运行此生成器将创建一个迁移文件和Painter和Painting模型。这个特定的生成器使用单个命令创建多个不同的函数,并且它是用最简单的代码生成的。然后转向你自己的模型并确保你有正确的关系(has_many,belongs_to)。下一步是创建迁移:railsdb:create和railsdb:migrate以迁移表。用户可以在控制台测试连接,只需要运行railsc,新建一些example,是否正确,可以测试验证;然后测试关联度(比如Painter.all.first.painting可以查看第一个画家的画)来源:unsplashcontrolgenerator运行railsgcontroller命令会提供一个控制文件(用于添加合适的动作)和对应的视图文件夹:railsgcontrollerpaintingsresourcegenerator如果用户在API的创建过程中使用的是前端MVC架构,或者只是想手动创建视图,那么resourcegenerator是编写代码的不错选择。创建一个Painting资源:railsgresourcePaintingnameimagepainter:belongs_to因为name和image没有写数据类型,所以默认是字符串。添加painter:belongs_to指定两个表之间的关系,并在paintings表中设置一列painter_id。上面的命令也可以使用引用来写(同样的结果):railsgresourcePaintingnameimagepainter:references下面是另一个为不同模型写相同命令的例子:railsgresourceAnswercontentcorrect_answer:booleanquestion:belongs_to有了生成器,当前应用有什么?可以在中找到的迁移文件在生成器中为传递给它的属性创建新的数据库表继承ApplicationRecord的模型文件(从Rails5开始,请参见上面的注释)继承ApplicationController的控制器文件Views目录没有视图模板文件View帮助文件用于此控制器的特定JavaScript的Coffeescript文件用于控制器样式的scss文件routes.rb文件中名为的完整资源不会导致过多的代码膨胀。路线图来源:unsplash最后一项可能不太常见。通常resources:paintings被视为一个“神奇”的路由,它包含在应用程序中执行CRUD所需的所有RESTful路由。那么resources:paintings翻译成什么?使用过滤器运行rakeroutes会更简单,这样只渲染绘画的路线:rakeroutes|greppaintingresources自动创建每条路线并使其可用于控制器。打开paintings_controller.rb文件会很有趣:出现在路由列表中的动作都不存在。它创建的代码非常少,只需添加您的应用程序所需的功能。脚手架生成器railsgscaffoldUserusername:string正确的命令可以创建有用的文件、设置路由和宏。希望本文能让您了解Rails的魔力、MVC的定义和命令的执行。