开始了大概三四天的Rails学习之路

时间:2022-03-20 01:43:12

  最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考。由于编程的日益流行,我结识了越来越多非计算机系的学生出于爱好开始写代码,但是其中的大部分人也许在用着一些错误的学习方式来学习编程,为了避免大家再继续走弯路,在这篇文章中,我会介绍下一个初学者要如何学习Rails。

  1. 为何而学,目标是什么?

  今天和朋友在走路时,谈到要如何学习Rails,我问的第一个问题是,你为什么要学习Rails,你学习编程的目标是什么?为何而学,最终希望达成的结果是任何学习前也许都需要明确的。如果目标是学习“通用性”程序,无论是为了处理数据、还是为了学习语言本身,那么我都建议早点抛弃Ruby,投入到Python的怀抱,虽然任何语言都是图灵完备的,但是每门语言都有着其最合适的应用场景,Ruby几乎完全依赖Rails存在。OK,这里我们暂且假设你学习的目标就是为了可以搭建一个Web网站,好的,我们继续向下说。

  2. 学习基本的HTML知识

  这是大部分初学者学习Rails都忽略的一点,了解基本的HTML知识非常重要。HTML并不需要掌握太深奥的知识,毕竟我们只需要入门。

  如果是精力允许可以花上1到2天左右时间快速通读这本书: 《Head First HTML与CSS》我那位极光推送的朋友就是这么干的。

  读的时候不需要对细节过于在意HTML标签和CSS样式属性的细节,只需要大概了解其中的所有标签,做到脑中有印象,记住一些常用的标签,知道CSS如何作用于HTML即可。复习时随便打开一个网页,对着页面指出这些都分别是什么元素,大脑构思下如果自己来写这个网页要如何组合标签。

  3. 学会使用前端调试工具

  Rails隐藏了大部分的HTML标签,而使用自己的模板语言,这固然方便开发,但是对于调试来说无外乎增加了一层难度。所以学习前端调试工具就显得尤为重要,常用的前端调试工具包括Firefox的firebug,以及Chrome的Developer Tools。这里以Chome的Developer Tools为例,无须学习过多的知识,了解常用的操作即可。

  知道如何查看对应标签的HTML源码,然后尝试去修改一些右侧对应的CSS样式。

  了解如何查看网络请求以及常用的状态码含义,例如200, 304, 500等。

  4. 学习常用的数据库操作

  学习Rails之前,我们还是要把基础的东西都学会更合适,最后一步就是数据库的基础知识。在这里,我个人更为推荐MySQL,原因是资料更多,在自己的本机上装一个MySQL,不用学的太深入,按照教程了解数据库的基本概念:库、表、行、列。然后按照教程操作,了解如何创建一个数据库、创建一个表,基本的增删改查即可。也推荐一本入门书吧官网访问极光推送看看:

  也不用全看完,看到第八章就差不多足够了。毕竟Rails有很完善的数据库操作封装,学习MySQL更多还是为了调试。

  5. 学习Rails基本理念

  好了,我估计上面的几步应该花掉了你三天左右的时间,终于可以开始学习Rails了。Rails有着很清晰的学习指南,不需要看书的,看这里就足够了: http://guides.ruby-china.org/getting_started.html 但是这篇更多还是为了有基础的人准备,如果没有任何语言基础,纯粹按照这个教程往下走会发现自己之后毫无扩展性,做其他的项目都很困难。(这也是我发现很多人的问题) 我们不妨同时在教程中穿插一些练习。以下只为思路,具体可以自己把控。

  我们先按照他的操作一步步向下走,安装Rails,使用脚手架创建Blog程序,Hello Rails。OK,进行到第四步后,请大家暂时停下来。这里我们打印出了Hello Rails,可是请大家先做一个练习:这里希望能用之前的HTML/CSS知识做一个相对复杂的Welcome页面,然后增加导航栏,并且可以根据导航跳转到一个About页面。 请大家在这里思考两个问题:

  1. Rails的路由是如何工作的

  2. Rails的页面模板是如何工作的。

  然后我们继续跟着教程去做,完成第5步,然后这里我们再次做一个练习:

  A. 将数据库从SQLite改成MySQL,并且将数据存储MySQL中。

  B. 每执行一步增删改查的操作都请在MySQL中查看变化

  C. 为文章增加一个字段,例如作者。然后学着去做对应修改,运行迁移后请查看migrate中的SQL发生了什么变化。

  D. 在浏览器查看由Rails生成的表单被解析成了怎样的HTML,查看每次发送一个提交、修改请求时,发生了那些网络请求。

  E. 在自己手写的代码中加入put 打印操作,打印不同的变量,学会基本的调试技巧(例如故意出错,然后打印结果)。例如在下图语句中间增加 puts article_params

  F. 关上教程,独立操作新增一个“增加用户”,“注销用户”,“修改用户”等类似的功能。复习之前的操作。

  G. 思考一些问题,Rails到底是如何工作,Rails的一些操作分别做了什么,route, controller, view, model到底如何配合工作,generate, rake等一些我们使用过的命令分别做了什么事情,并且验证确认。希望这里大家可以在纸上画出一张图,画出rails的每个组件的作用、意义,每个命令都影响了哪些部分。

  继续完成剩余部分,第六部分的作用是完成两个模型的关联。与上述的做法类似:

  A. 我们每做一步操作要思考这一步到底做了什么?对数据库做了哪些操作?

  B. 如果要将文章和作者相关联,那么整个程序要如何修改。

  C. 我们分别看下对应的数据库都发生了什么变化?我们不从Rails的角度去思考,单纯从数据库的角度去思考,那么这些表为什么这么设计。

  D. 如果要给文章打Tag,Tag和文章的关系是什么样,程序如何修改,数据库变成了什么样子。

  E. 如果Tag是由用户打上去的呢?那么程序怎么办呢?

  F. 我相信上述操作,会碰到各种各样的问题,善用Google和*,但是解决问题是没有意义的,要思考为什么这样就能解决问题,然后想清楚后给自己出一个类似的问题让自己去解决。另外,善于使用puts打印来调试问题。(虽然很土,但是很好用)

  6. 学习Rails的若干问题

  A. 学习一门语言最重要的是学习这个语言背后的设计理念和世界观。这也是我讨厌Rails的一点,Rails更加强调约定大于配置,期望你的一切都按照他的步骤去工作,所以我们在学习Rails时最大需要做的转变就是尽量不要去写代码,放下心里的那些不安全感,相信他总会帮你做好的。

  B. 面向对象的设计架构。无论是Django还是Rails都是完全秉承面向对象的设计理念。我们在传统搭建一个项目时,都会首先去想设计这个产品功能时数据库要设计成什么样,然后我们的SQL语句要如何去写。 但是Rails抛弃了数据库的实现细节(这绝不是不写SQL那么简单),例如以上述例子而言,我们只需要明确知道一个Blog会有多个Comment,一个作者会有多个Blog,至于底层如何对应实现交给Rails框架就好了。所以我们需要抛弃语言细节,更多从“对象”的角度去思考整个关系。

  C. 不要纠结于Ruby语法本身,对于初学者而言,千万不要纠结于Ruby语法本身,我相信大部分人至少都考过计算机二级学过C语言,因为大部分功能无外乎增删改查而已,加起来的语句也就那么多,所以照着写,然后遇到功能去查,然后记住足以应付大部分问题。至于Ruby语法,等到进阶时再去读把。

  D. 一定要想清楚Rails各个组件的功能,一个浏览器的url请求到最后HTML页面展现在用户面前,都经历了哪些事情,清楚这个逻辑非常重要。

  E. 反复练习。不要贪图看太多的内容,其实上面那个入门指南已经可以解决80%的问题了,请大家就着某个页面功能反复打磨这个页面,比如增加作者,比如删除评论,比如给评论添加评论,比如所有评论的尾部都带有一个笑脸等等。

  F. 多打印,打印看各种各样的变量,故意制造出错,知道这样做会出错并且猜到出错信息是件很值得做的事儿。这样才能更了解整个框架的运行原理。

  7. 写在最后

  我一直不是很赞同Rails Girl , Django Girl这样的活动,至少不赞同他们的教学模式。编程到底是什么?做出来一个网页?其实我赞同每个人都学一学编程,但是是因为编程最重要的是一种解决问题的能力,知道怎么办、为什么这么做远远要比这样做出来重要的多。当我看到很多人照着教程亦步亦趋地完成一个看似很炫的功能,我不得不说,其实没任何意义,我也并不认为这样能培养所谓的兴趣。思考远远比去做有意义的多。

  希望大家编程愉快。

作者:极光推送 飞林沙

开始了大概三四天的Rails学习之路的更多相关文章

  1. [Rails学习之路]初识Ruby(一)

    Ruby是一门动态的.强类型的.纯面向对象的编程语言.它和Python非常相似,但比Python面向对象更加彻底.使用更加灵活.语法更加复杂.也更为有趣. 抛开做事情到底应该有多少种方法这个问题,我相 ...

  2. [Rails学习之路]Rails路由配置

    如果是使用Rails的默认约定,那么几乎是零配置. 但有些时候,我们可能不得不(或者更喜欢)进行一些特殊的配置. 其实Rails在路由功能中也有很丰富的配置选项. routes.rb文件中靠前的规则优 ...

  3. [Rails学习之路]Rails文件结构与路由

    约定优于配置和RESTful是Ruby on Rails十分推崇的哲学.在一个默认的RESTful的Rails项目中,使用资源和HTTP动词来帮助组织项目. 假如有一个使用scaffold创建的Rai ...

  4. [Rails学习之路]初识Ruby(二)

    继续上次Ruby的学习.接下来就到了Ruby的方法. Ruby的方法与Python仍然很像.使用def定义,可以使用undef取消定义. 在Ruby中,经常可以看见方法后面跟有"?&quot ...

  5. rails学习笔记: rake db 相关命令

    rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...

  6. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  7. 我的nodejs学习之路1

    距离上次写文章类东西已经有4-5年了,猛然写东西有种提笔忘字的感觉. 言归正传,这是一篇记录我自己学习nodejs的文章,在写下这篇文章的时候我也不是什么大牛,也不是很了解nodejs这项技术.之所以 ...

  8. spring源码学习之路---深入AOP(终)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...

  9. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

随机推荐

  1. 整理iOS9适配

    整理iOS9适配 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版, ...

  2. ASP.NET 各种缓存

    原文地址:http://www.cnblogs.com/ltp/archive/2009/06/30/1514311.html   有时候总听到网友说网站运行好慢,不知如何是好:有时候也总见到一些朋友 ...

  3. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  4. Swift 2.0基本语法

    内容包括:01变量&常量 02分支 03循环 04字符串 05数组 06字典 07函数 01变量&常量 //: Playground - noun: a place where peo ...

  5. DataGrid( 数据表格) 组件[4]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  6. neo4j语法

    图数据库在社交网络.实时推荐.征信系统.人工智能等领域有广泛应用. 集群特征:主从复制,重选主服务器和容错:每个实例都有自己的本地缓冲 性能优势:查询内不跨网络:实时操作,具有快速和一致的响应时间:缓 ...

  7. debian9使用国内源安装docker以及一些使用方法

    debian9使用国内源安装docker以及一些使用方法   首先, 我的环境是debian, 容器是centos debian 扔源 # deb-src [arch=amd64] https://m ...

  8. 借着Python-3来聊聊utf-8字符集

    [关于文本文件] 文本文件也是以二进制序列的方式保存在磁盘中的,磁盘并不能保存文本:我们打开文本文件的时候之所以能看到文字,是因为 软件根据文件所用编码的字符集对文件进行解码的原因. [以utf-8字 ...

  9. internal in C#

    说白了 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 被 protected internal 修饰的属性/方法 可以在其他项目中,被派生类使用 例如有两个项目app1和app ...

  10. maven打包加时间戳

    基于Maven的项目,发布时需要打包,如tar.gz.web项目打成war格式包.每次打包时希望自己加上时间戳,假如我的项目名是myproject,默认打包后名为myproject.war.而我希望的 ...