`

rails总结

阅读更多
-------------------------网上找的
事实上,我觉得楼主你现在面临的问题并不是具体的技术细节,因为常规的功能在过了一遍Rails Tutorial之后应该就都学会了,无非就是自己动手的时候想不起来。不过这也简单,多看看范例和API就好。

对于初学者而言,最麻烦的就是不知道该如何下手,这个楼主也提到了。我觉得原因不在于具体的技术,而在于对整个产品开发过程的了解还不够。换言之就是对全局的把握和掌控,我想这个需要长时间和大范围的涉猎积累才能有所进步。大多数的coder都会写具体的功能,但是却不会从宏观的角度规划一个产品的roadmap,在常规的开发团队里,这通常都是项目经理或是产品经理的工作,而工程师只需要看着需求文档一个功能一个功能,一个模块一个模块的实现下去就好了,因此就不会觉得迷茫。

问题就是,对于绝大多数个人开发者,并没有参与全局开发的经验,更不要说全局性的设计一个产品了,所以具体的某个技术好学,但总是缺一条线把这些技术连接起来。所以呢,我的建议是在领略过Rails的概貌之后(比如说过了一遍Rails Tutorial),先去了解一下一个完整的web产品的组成,梳理出一个线路图出来,就容易找到方向了。

这个事情并不是想象中那么复杂,我们完全可以参照一些成熟的产品架构来学习。举个例子吧,比如说你要开发一个论坛类的产品,那么你首先要为这个产品定义一下大体的功能。我们不谈那些独创的特色功能,就从复制一个典型的论坛说起,都需要什么呢?(这个要靠你自己想,如果你想不出来,就多去看看别的论坛,分析它们拥有哪些功能,功能之间是如何交互和组织的等等。)

这个时候,你要学会自言自语,对着自己说:“假设当我第一次访问这个论坛的时候,我首先看到的是一个欢迎页面。这个页面是否会有动态的内容暂时我还不确定(比如说从论坛的所有板块里提取出的热点话题等等),所以我先当它是个几乎静态的吧。”

此时,你会面临一个选择:我是要生成什么?scaffold? model? controller?

Rails Tutorial里实际上给出了答案,就是在最开始解释MVC模型的时候。

对于一次不需要和数据库交互的用户请求,MVC的处理过程是:用户请求(浏览器:发出请求)-> 路由(router:将请求映射至控制器的行为,也就是action)-> 控制器(controller:对应的action处理相应的请求,处理后交给视图渲染)-> 视图(view:渲染完成交换给控制器)-> 控制器(controller:将结果返回给浏览器)-> 输出(浏览器接到发出请求后的相应)

可以看到,这个过程里没有model的参与,这是因为我们假设的目标是一个静态的页面,是不需要和数据库模型交互的。这个过程实际上就是Rails Tutorial里前五章的内容。

于是,答案就是生成一个controller就够了。scaffold生成的是一个完整的RESTful资源,包括了model, controller, views, assets, test...显然超出了我们的预定计划(当然它也可以做到我们要做的,只不过有点资源浪费罢了),目前需要的不是一个完整的resource。

此外,你还可以多想一步(可选,即使现在想不到,将来也可以手动添加):既然上述的流程说的是来自用户的一次请求,那么对于其他的请求呢?

刚才提到了,router负责将用户请求映射至action(在controller中),那么对于静态页面来讲,基本上就是你有多少个页面,就要有多少个action,因为每一个页面都会用一个独立的URL来确定位置,也就是有一个独立的请求。

所以,假设我们的静态页面有:首页、关于、帮助、联系,于是我们就可以开始动手执行:

rails g controller static_pages home about help contact

在这条命令里,static_pages就是控制器的名字,意思是“静态页面”(这个不是强制的,我只是模仿rails tutorial里的做法,这样LZ你也比较熟悉。实际开发中我喜欢对静态页面控制器命名为portals或者entrance,请随意),也就是“用来控制静态页面部分的控制器”。在这个控制器中,拥有四个actions:home / about / help / contact,分别对应计划中的四个页面(当然可以用别的名字,只不过routes.rb里的配置要和它们一一对应,另外不要用CRUD的名称,因为它们是和RESTful资源对应的——这就是“惯例重于配置”的思想)

接下来,router里面设置好如何将用户请求转至对应的action:

root to: "static_pages#home"

get '/about', to: "static_pages#about"
match '/help', to: "static_pages#help", via: 'get'
match '/contact', to: "static_pages#contact"
这几句用语言表述下来就是:

对于来自网站的根路径(root)的get请求,如:http://myapp.com/,转交给static_pages控制器的home 行为(action)来处理

对于来自网站的about路径的get请求,如:http://myapp.com/,转交给static_pages控制器的about行为(action)来处理

以下雷同,第三个match + via: ‘get’等同于第二个直接 get;第四个只有match,代表对于来自该路径的所有类型的请求(get post put等等);这里都是举例,实际情况实际处理。

OK,到了这一步,控制器已经可以通过action将处理的结果交给views渲染了。对于静态页面来讲,action的内部几乎不需要写代码,rails通过action的名字就可以找到对应的views。比如说对于about action,对应的视图就是/app/views/static_pages/about.html.erb

接下来,你在视图里写什么,浏览器就可以通过 http://myapp.com/about 看到什么。

再往后,搞定静态页面之后,你大概会先碰到注册、登陆、验证三部曲。那么这就需要用到model了,因为你需要在数据库里记录一个注册用户的信息啊,对不对?那么实现的思路其实和上面也没什么不同,无非就是在MVC的工作流程里多了model这个环节,同时controller要负责的逻辑处理也酌情增加,于是整体的复杂度有所提升罢了。

That's it! 总结一下就是:

要全面的了解一个web产品到底是怎么设计和定义的(功能?模块?内容?体验?)
要深入的领悟web的通信机制和mvc框架的工作机制
要学习对于各种解决具体问题的具体手段
多测试。尤其是当你不知道要做什么的时候,测试的意义就在于可以让你先把结果写出来,然后提示你距离达到这个结果你还有多远要走
多看文档、视频。比如说上面讲的 routes.rb 里 get / match 的区别和用法,一开始我看rails tutorial也是不明就里,于是就去看了官方的guide,这才算是明白了。
Rails很简单,但前提是用他的人要有系统而扎实的基础知识。Rails的简单是因为它及其聪慧且优雅的隐藏了一整套web应用框架背后的种种复杂,如果你要驾驭这种简单,你就要懂得背后的复杂——你可以不用学会写如何处理这些复杂,但你至少要知道这些复杂是什么,它们怎么工作的。
即兴写就,看着有点乱,还请各位海涵,希望对LZ有用。
分享到:
评论

相关推荐

    rails-erd:生成Rails应用程序的实体关系图

    Rails ERD-为Rails应用程序生成实体关系图 是一颗宝石,它使您可以轻松地基于应用程序的Active Record模型生成图表。 该图概述了模型之间的关系。... 总结如下: 安装Graphviz 2.22+( )。 在具有Homeb

    ruby on rails 3.1.0数据库查询方法汇总

    本人学习总结的ruby on rails 3.1.0数据库类查询方法,比较全了

    windows下安装ruby与rails时遇到的问题总结

    最近因为工作的需要,准备安装ruby on rails,在网上搜了下,步骤都类似,但实际安装过程中却碰到很多问题。 说明下:文章是按照我尝试的过程描述的。但最终是靠 运行 railsinstaller一键式安装包才成功的(第五段)...

    Rails命令行常用操作命令简明总结

    新增类 代码如下:ruby script/generate Model <类名> <字段1>:<类型>… ruby script/generate Model Item name:string age:integer 移除类 代码如下:ruby script/destroy Model 新增控制器 ...

    Ruby on Rails所构建的应用程序基本目录结构总结

    当使用rails new appname生成Rails应用后,我们可以通过tree来查看Rails应用的目录结构: 目录结构 应用程序目录下会有app、config、db、doc、lib、log、public、script、test、tmp和vendor等11个目录和config.ru、...

    Rails中使用MySQL分区表一个提升性能的方法

    主要介绍了Rails中使用MySQL分区表一个提升性能的方法,本文总结出了一个简单的方法实现避免扫描全部的分区表,从而提升性能,需要的朋友可以参考下

    剖析Rails3MVC中的数据传递

    简介:本文分析了Rails3的MVC架构,探讨总结了Rails3的控制器与视图、控制器与模型、视图与布局以及多个视图之间的数据传输方法和技巧。假设您对RubyonRails有基本的了解,至少能够配置RubyonRails并运行类似Hello...

    Ruby on Rails中MVC结构的数据传递解析

    如果读者已经开发过基于 Rails 的应用,但对其 MVC 间的数据传递还有诸多困惑,那么恭喜您,本文正是要总结梳理 Rails 数据传递的方法和技巧。Ruby on Rails 3(以下统称为 Rails 3)是当前的主要发布版本,本文所述...

    relay-rails-blog:由graphql,中继和标准rails应用程序提供支持的演示Weblog。 我们正在使用Graphql服务器和中继来满足我们的React组件数据需求

    由Rails,react,graphql和Relay支持的演示博客应用程序。... 最终-总结 当前功能 列出帖子 列出帖子评论 无限滚动-帖子和评论 显示作者信息,投票和评论数 创建评论和投票的变异 编辑和更新评论 创建和删除

    javaee登陆页面源码-rails_demo_post:rails_demo_post

    读起来也还好,毕竟有目标,自己也没有陷入细节之中,从第一份代码提交到现在,书翻完了,刚好一个月,也算是对自己的一份总结。 一边写rails 一边也在写Android,深入下来,感觉两者共通之处还是有的。但是一深入想...

    cocktailist:内置在Rails&Backbone中的Cocktail Listingrating应用

    cocktailist是一个基于Rails和Backbone构建的鸡尾酒列表/浏览/评分应用程序,其主要目的是满足我自己的需求,即跟踪我所拥有的所有酒吧和特色饮料。 用户可以: 建立帐户 创建会话(登录) 创建鸡尾酒条目 回顾鸡...

    RubyonRails九日学习计划

    交流总结。 第九天 完成新闻系统需求分析和设计,并有相关文档。主要功能点是: 1. 新闻发布(标题、内容(1000个汉字即可)、新闻分类、有效期) 2. 新闻的分类 3. 新闻列表显示(能翻页) 4. ...

    RoR 培训课程PPT

    一个为期五天的Ruby on Rails课程的总结PPT非常适合初学者

    网站反爬虫和DOS攻击的利器 limiter.zip

    早年的JavaEye网站曾经深受DOS攻击和爬虫海量抓取造成的负载过高的困扰,项目作者曾经和这个问题进行了为期几年不懈的斗争,并且在总结几年斗争经验后写了一篇总结性博客文章:互联网网站的反爬虫策略浅析 。...

    编程狂人第九期(2014-1-20)

    Rails 3 升级 Rails 4 中遇到的问题及解决方法 php性能优化 Java中的 equals() 和 hashCode() 契约 程序设计 IOS缓存机制详解 ios系类教程之用instruments来检验你的app Android 学习笔记之 SQLite基础用法 如何...

    Ruby生成随机数的方法总结

    数字实际上不是随机的 没有一台计算机能纯粹通过计算产生真正的随机数。它们能做的最好的事情就是生成伪随机数,伪随机数是一组看起来随机但实际上不是随机的数字。 对于人类观察者来说,这些数字确实是随机的。...

    StudySessions:总结和讨论日语学习课程

    我正在等待提出要求,因为我想总结一下在日本的学习课程!我想用json输出它,以便可以在程序中使用它。让我们悠闲地思考。 冈山县 冈山市 冈山露比(Ruby Okayama Ruby),Ruby on Rails研究小组 冈山Git用户组 仓敷...

Global site tag (gtag.js) - Google Analytics