我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Rails、MVC及最常用的Rails命令有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Rails、MVC及最常用的Rails命令有哪些

本篇内容主要讲解“Rails、MVC及最常用的Rails命令有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Rails、MVC及最常用的Rails命令有哪些”吧!

Rails是什么?

Rails是一种web应用框架。根据模型-视图-控制器(MVC)模式,它包括了创建数据库支持的web应用程序时所需的所有内容。MVC将应用分为三层:模型、视图和控制器,每一层都有特定任务。

Rails、MVC及最常用的Rails命令有哪些

模型-视图-控制器(MVC)结构示意图

模型层

模型层代表领域模型(如Account、Product、Person、Post等),概述应用程序中特有的业务逻辑。

在Rails中,数据库支持的模型类源于 ActiveRecord::Base。Active  Record支持用户将数据库行的数据表示为对象,并使用业务逻辑方法修饰这些数据对象。大多数Rails模型由数据库支撑,模型也可以是Ruby普通类或实现由  Active Model模块提供的一组接口的Ruby类。

控制层

控制层的功能在于处理传入的HTTP请求以及给出适当响应。通常这一层意味着返回HTML,但Rails控制器还可以生成XML、JSON、PDF、移动专用视图及其他格式。

控制器加载和操作模型,并呈现视图模板,以便生成适当的HTTP响应。在Rails中,传入要求由Action Dispatch发送至相应控制器,控制类来自  ActionController::Base。Action Dispatch和Action Controller一起绑定于Action Pack中。

Rails、MVC及最常用的Rails命令有哪些

图源:unsplash

视图层

视图层由“模板”组成,主要负责提供应用程序资源的适当描述。模板可以有多种格式,但大多数视图模板都是带有内嵌Ruby代码的HTML(ERB  文件)。视图通常生成控制器响应,或生成电子邮件正文。在Rails中,视图生成由Action View处理。

开发一款新型Rails应用

首先从头构建一个应用程序,这步之前要确保系统内装有Ruby、RubyGems和Bundler。打开终端导航到一个有权限创建文件的目录。先要做的是安装Rails并通过运行railsnew命令构建一个新型Rails应用程序。

要从头开始创建只支持API的Rails,创建时--api应在Rails应用程序名称之后:railsnew<my_app_name>  --database=postgresql --api  (使用Postgresql数据库配置应用程序更为容易,但别忘了在运行命令前安装这一数据库)。例如:rails new Gallery  --database=postgresql &ndash;api。

通过使用 --api  旗标,Rails能够删除许多默认功能和中间件(大多是涉及无用的浏览器)。控制器继承ActionController::API而非ActionController::Base,生成器会跳过生成视图。为只支持API的Rails构建设置资源无须作任何改变。

将所有所需gem添加至Gemfile中后开始运行bundle install。

  • 初始化数据库:rails db:create

  • 运行Rails服务器:rails s

Rails生成

Rails团队的首要目标是高效地构建核心应用程序功能。Rails系统拥有大量生成器,能帮助用户完成一些手动作业。生成器除了节省时间,还有一些其他优点:

  • 生成器能够为应用程序测试套件设置基本规格。它们会为用户提供一些基本例子而非编写复杂的逻辑测试。

  • 经设置,生成器的运行方式保持不变,这样便能标准化代码并帮助用户更有效地开发,原因在于用户不必过多担心手写代码时可能会出现的拼写、语法错误或其他相关漏洞。

  • 生成器遵循Rails最佳操作,包括使用RESTful命名模式、删除重复代码、使用部分和许多其他最佳类型设计模式。

然而,某些生成器会创建相当多的代码。如果不使用某个代码,它就会造成应用程序代码不必要的混乱,从而给以后的程序员带来困扰。所以何时使用生成器最好呢?所有Rails生成器作为命令输入终端,并遵循下列语法:

rails generate <name of generator> <options>--no-test-framework

--no-test-framework  是一个旗标,意在提醒生成器不要为新生成模型和控制器等创建任何测试。当用户运行自己的Rails应用程序时则不需要旗标,这十分有助于快速建立测试套件。

为了提高效率,Rails将generate 方法简化为g,因此上述CLI命令可以简化为:

rails g <name of generator> <options>--no-test-framework

Rails、MVC及最常用的Rails命令有哪些

图源:unsplash

下列是Rails提供的主要生成器。笔者将分别举例说明:

迁移生成器

Rails有一组遵守规范的优质迁移生成器,能够有效管理数据库模式。绘制域模型后可以进行下一步。首先使用案例库应用程序中的数据库迁移并更新 painters  表。运用下列命令在表中添加一列,将其命名为portrait:

railsg migration add_portrait_to_painters portrait:string --no-test-framework

终端显示创建了迁移文件20200928055457_add_portrait_to_painters.rb.。由于迁移文件名不得重复,生成器会在文件名前加上时间戳。神奇的事情发生了&mdash;&mdash;打开db/migrat  目录中创建的文件,它现在应该是这样:

class AddPortraitToPainters < ActiveRecord::Migration[6.0]    def change      add_column :painters, :portrait,:string    end end

注意到生成器的作用了吗?它自动感知到用户想添加一个新的列,构建了add_column 方法调用。这是如何做到的?

实践证明,命名迁移文件的方法至关重要。通过在名称前加上add_文本,它向迁移生成器发送了一个信号,即这种模式更改的目的是向表中添加一列/多列。

那么它是如何知道用户想在哪个表上添加的呢?它将_painters 文本附加到迁移名称的末尾,以此告诉Rails用户想更改的表格是 painters  表。最后,通过在命令末尾添加 portrait:string 文本告知生成器新的列的名称为portrait,数据类型为 string。

用户可以通过运行rails db:migrate 更新数据库模式,该模式也会反映出这次变更。

删除列则可以运行另外一个迁移:

railsg migration remove_portrait_from_painters portrait:string

如果打开此迁移文件则会看到下列代码:

class RemovePortraitToPainters < ActiveRecord::Migration[6.0]    def change      remove_column :painters, :portrait,:string    end end

运行rails db:migrate 后,模式也会得到更新。当需要运行任何未决迁移时可以使用这一命令。

  • railsdb:migrate:reset:它会删除数据库信息,在新的数据库运行迁移并重新加载种子数据。

  • railsdb:seed:将数据从文件:db/seeds.rb加载到数据库中。这种方法对用Rails项目所需的初始数据填充数据库十分有用。

  • railsdb:rollback:回滚上次执行的迁移。它会撤销上一次迁移,接着用户便可编辑文件并重新运行 rails db:migrate  。注意,进行过程中谨慎使用这一命令,因为它极具破坏性,很有可能造成数据丢失。运行时一定确保自己完全清楚运行后的结果。

模型生成器

这是一种经常使用的生成器类型。它适用于编写创建模型和关联数据库表所需的核心代码,且不会使应用程序过于复杂。一般来说需要模型名称(单数和首字母大写)和模型参数。

接下来为带有 name、bio和 genre列的Painter 应用程序添加一个新模型,可以通过以下CLI命令使用模型生成器:

railsg model Painter name:string genre:string bio:text

如果数据类型为字符串,则不需要在列名后指定类型,因为它是默认数据类型。因此如下:

railsg model Painter name genre bio:text

因其水平较高,这一步已经创建了:

  • 添加一个表格和name、genre和 bio列的数据库迁移

  • 继承ApplicationRecord (自Rails 5起)的模型文件

我们接下来创建另一个属于Painter的模型Painting:

railsg model Painting name image painter:belongs_to

切记首先生成具有has_many宏命令的代码;在运行迁移时只有带有belongs_to 的代码有用,否则会得到错误代码:

ActiveRecord::StatementInvalid:PG::UndefinedTable: ERROR: relation "<some table name>" doesnot exist

运行这一生成器会创建出一个迁移文件和 Painter  和Painting模型。这一特定的生成器创建了一些具有单命令的不同的功能,且仅用最简单的代码就生成出来。接着转向自己的模型,确保建立适当关系(has_many,  belongs_to)。

下一步是创建一个迁移:rails db:create 和 rails db:migrate来迁移表格。用户可以在控制台中测试连接,只需要运行rails  c并创建一些新的例子,不论正确与否都可以测试验证;接下来测试关联度(如Painter.all.first.painting能够检查第一个painter的painting)

Rails、MVC及最常用的Rails命令有哪些

图源:unsplash

控制生成器

运行rails g controller 命令会提供一个控制文件(用于添加适当操作)和相应的视图文件夹:

railsg controller paintings

资源生成器

如果用户在在创建API过程中使用前端MVC架构,或只想手动创建视图,resource生成器是编写代码的一个优选。创建Painting资源:

railsg resource Painting name image painter:belongs_to

因为没有为name和image 编写数据类型,因此默认情况下它是一个字符串。添加 painter:belongs_to  来指定两个表格的关系,并在paintings表格中设置一列 painter_id。也可以使用 references编写上述命令(结果一样):

railsg resource Painting name image painter:references

这是为不同模型编写相同命令的另一个例子:

railsg resource Answer content correct_answer:boolean question:belongs_to

凭借生成器,目前的应用程序拥有什么?

  • 一个迁移文件,能够在生成器中为传递给它的属性创建一个新的数据库表

  • 继承ApplicationRecord的模型文件(从Rails 5开始,见上述注意事项)

  • 继承了ApplicationController的控制器文件

  • 不带有视图模板文件的视图目录

  • 视图helper文件

  • 用于该控制器的特定JavaScripts的Coffeescript文件

  • 用于控制器样式的 scss文件

  • routes.rb文件内的完整资源调用

resource生成器是一种智能生成器,创建全功能资源所需的一些核心功能,同时不会导致过多代码膨胀。

路由

Rails、MVC及最常用的Rails命令有哪些

图源:unsplash

最后一项可能不太常见。通常resources:paintings被视作为一个“魔法”路由,它包含在应用程序中执行CRUD所需的全部RESTful路由。那么resources:paintings会转化成什么?用滤波器运行  rake routes 会比较简单,这样就只会呈现paintings的路由:

rake routes | grep painting

resources自动创建每个路由并使其对控制器可用。打开paintings_controller.rb文件会很有趣:路由列表中出现的操作都不存在。它创建的代码非常少,只需添加应用程序需要的功能。

Scaffold生成器

rails g scaffold User username:string

到此,相信大家对“Rails、MVC及最常用的Rails命令有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Rails、MVC及最常用的Rails命令有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ping命令最常用的方法有哪些

这篇文章主要介绍了ping命令最常用的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ping命令最常用的方法有哪些文章都会有所收获,下面我们一起来看看吧。一、ping基本使用详解在网络中ping是一个
2023-06-27

10 个必备而且非常有用的 Ruby on Rails 4 Gems分别是哪些

10 个必备而且非常有用的 Ruby on Rails 4 Gems分别是哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Ruby on Rails框架是一个用于开发Web应
2023-06-17

curl常用命令及参数有哪些

curl是一个用于传输数据的命令行工具,它可以通过各种协议(如HTTP、FTP、SMTP等)进行数据传输。以下是curl的一些常用命令和参数:1. -X/--request:指定HTTP请求方法,如GET、POST、PUT等。2. -d/-
2023-09-15

常用dos命令及语法有哪些

这篇文章给大家分享的是有关常用dos命令及语法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。常用dos命令及语法cd 改变当前目录,dir 列出 文件 和 文件夹名,dir /ad /b 指列出来 当前
2023-06-08

Linux常用包管理及命令有哪些

这篇文章主要为大家展示了“Linux常用包管理及命令有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux常用包管理及命令有哪些”这篇文章吧。简介在Linux上,安装软件的方式一般有几种
2023-06-15

常用的Git命令有哪些

本篇内容主要讲解“常用的Git命令有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常用的Git命令有哪些”吧! Git 是一个开源的分布
2023-06-20

MongoDB的常用命令有哪些

MongoDB的常用命令有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、数据库相关1.切换/创建数据库>use “dbname”;2.查询所有数据库> show dbs
2023-06-26

常用的Ping命令有哪些

本篇内容介绍了“常用的Ping命令有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Ping是个使用频率极高的实用程序,用于确定本地主机是
2023-06-09

有哪些常用的Dockerfile命令

这期内容当中小编将会给大家带来有关有哪些常用的Dockerfile命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。01 CMDCMD命令用于指定一个容器启动的时候需要运行的命令。它和RUN指令有点类似,
2023-06-14

PostgreSQL常用的命令有哪些

PostgreSQL是一个常用的开源关系型数据库管理系统,它具有丰富的命令集,以下是一些常用的命令:链接到数据库:psql -U -d (使用用户名和数据库名称连接)创建数据库:CREATE DATABASE ;删除数据库:DROP DA
2023-10-23

Linux常用的命令有哪些

今天小编给大家分享一下Linux常用的命令有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。系统信息arch 显示机器的处
2023-06-26

有哪些常用的dos命令

这篇文章将为大家详细讲解有关有哪些常用的dos命令,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是DOS命令DOS命令,计算机术语,是指DOS操作系统的命令,是一种面向磁盘的操作命令,主
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录