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


      最近因为一位极光推送朋友,我开始了大概三四天的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和Stackoverflow,但是解决问题是没有意义的,要思考为什么这样就能解决问题,然后想清楚后给自己出一个类似的问题让自己去解决。另外,善于使用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这样的活动,至少不赞同他们的教学模式。编程到底是什么?做出来一个网页?其实我赞同每个人都学一学编程,但是是因为编程最重要的是一种解决问题的能力,知道怎么办、为什么这么做远远要比这样做出来重要的多。当我看到很多人照着教程亦步亦趋地完成一个看似很炫的功能,我不得不说,其实没任何意义,我也并不认为这样能培养所谓的兴趣。思考远远比去做有意义的多。

      希望大家编程愉快。

          作者:极光推送 飞林沙

  • 相关阅读:
    pow()函数结果强制转化为int造成误差的分析
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    博客园鼠标点击特效代码
    codeblocks更改颜色主题
    codeblocks1712设置中文
    SQl
    项目中nodejs包高效升级插件npm-check-updates
    正则表达式的整理(将金钱数变成带有千分位)
    从一个数组中过滤出另外一个数组中相关字段相等的数据
    IONIC3 打包安卓apk详细过程(大量图文)
  • 原文地址:https://www.cnblogs.com/jpush88/p/5169467.html
Copyright © 2020-2023  润新知