实现微博资源后,我们的演示应用基本上完成了。现在还剩下社交功能没有实现,即让用户之间可以相互关注。在第 12 章,我们会学习如何实现用户之间的这种关系,还要实现一个真正的动态流。 如果你跳过了 11.4.4 节,在继续之前,先提交改动,然后再合并到 master 分支: $ bundle exec rake test $ git add -A $ git commit -m "Add user m
实现账户激活和密码重设功能后,我们的演示应用已经完整实现了“注册-登录-退出”机制,而且是专业级的。本书剩下的章节以此为基础,实现类似 Twitter 的微博(第 11 章)和所关注用户发布的微博列表(第 12 章)。在实现的过程中,我们会学到一些 Rails 提供的强大功能,例如使用 has_many 和 has_many :through 实现的高级数据模型。 10.4.1 读完本章学到了什么
我们用了好几章介绍如何实现用户资源,在 5.4 节用户还不能注册,而现在不仅可以注册,还可以登录、退出、查看个人信息、修改信息,还能浏览网站中所有用户的列表,某些用户甚至可以删除其他用户。 现阶段实现的演示应用建立了坚实的基础,完全可用于任何需要认证用户和权限系统的网站。第 10 章会实现两个附加功能:向新注册的用户发送账户激活链接(同时验证电子邮件地址有效),以及密码重设功能,帮助忘记密码的用户
这两章我们介绍了很多基础知识,也为稍显简陋的应用实现了注册和登录功能。实现用户认证功能后,我们可以根据登录状态和用户的身份限制对特定页面的访问权限。我们会在第 9 章实现编辑用户个人信息的功能。 在继续之前,先把本章的改动合并到 master 分支: $ bundle exec rake test $ git add -A $ git commit -m "Finish log in/log ou
实现注册功能对演示应用来说是个重要的里程碑。 虽然现在还没实现真正有用的功能,不过却为后续功能的开发奠定了坚实的基础。第 8 章会实现用户登录、退出功能,完成整个认证功能。第 9 章,我们会实现更新用户个人信息的功能,还会实现管理员删除用户的功能,这样才算完全实现了表 7.1 中列出的用户资源相关的 REST 动作。 7.6.1 读完本章学到了什么 Rails 通过 debug 方法显示一些有用的
本章从零开始建立了一个可以正常使用的用户模型,创建了 name、email 和 password 属性,还为这些属性制定了重要的取值约束规则。而且,已经可以使用密码对用户进行认证了。整个用户模型只用了十行代码。 在接下来的第 7 章,我们会创建一个注册表单,用来新建用户,还会创建一个页面,显示用户的信息。第 8 章会使用 6.3 节实现的认证机制让用户登录网站。 如果使用 Git,而且一直都没提交
本章,我们为应用定义了一些样式,也设置了一些路由。本书剩下的内容会不断为这个应用添加功能:先添加用户注册、登录和退出功能,然后实现发微博功能,最后添加关注用户功能。 现在,如果使用 Git 的话,应该把本章所做的改动合并到主分支中: $ bundle exec rake test $ git add -A $ git commit -m "Finish layout and routes" $ g
现在对 Ruby 语言的介绍结束了。第 5 章会好好利用这些知识来开发演示应用。 我们不会使用 4.4.5 节创建的 example_user.rb 文件,所以我建议把它删除: $ rm example_user.rb 然后把其他的改动提交到代码仓库中,再推送到 Bitbucket,然后部署到 Heroku: $ git status $ git commit -am "Add a full_t
总的来说,本章几乎没有做什么:我们从静态页面开始,最后得到的还几乎是静态内容的页面。不过从表面来看,我们使用了 Rails 中的控制器、动作和视图,现在我们已经可以向网站中添加任意的动态内容了。本书的后续内容会告诉你怎么添加。 在继续之前,我们花一点时间把改动提交到主题分支,然后将其合并到主分支中。在 3.2 节,我们为静态页面的开发工作创建了一个 Git 新分支,在开发的过程中如果你还没有提交,
至此,对这个 Rails 应用的概览结束了。本章开发的玩具应用有优点也有缺点。 优点 概览了 Rails 介绍了 MVC 第一次体验了 REST 架构 开始使用数据模型了 在生产环境中运行了一个基于数据库的 Web 应用 缺点 没自定义布局和样式 没有静态页面(例如“首页”和“关于”) 没有用户密码 没有用户头像 没登录功能 不安全 没实现用户和微博之间的自动关联 没实现“关注”和“被关注”功能
这一章做了很多事:安装,搭建开发环境,版本控制以及部署。下一章会在这一章的基础上开发一个使用数据库的应用,让我们看看 Rails 真正的本事。 如果此时你想分享阅读本书的进度,可以发一条推文或者更新 Facebook 状态,写上类似下面的内容: 我正在阅读《Ruby on Rails 教程》学习 Ruby on Rails! http://railstutorial-china.org/ 建议你加
侯会计是个与众不同的人。比如有人向你提意见,认为你错了,你大概会想:我哪里会错呢?肯定是你自己错了吧,理由如此如此这般这般。但是如果一百个人向你提意见,认为你错了,你大概就会想:也许我真的错了。 但侯会计不是这样的,哪怕是全世界的人都向她提意见,她也会固执地认为全世界的人都不对,都不理解她。要是只有一个人向她提意见,又不一样了,她多半认为这人肯定跟自己有仇,一定要狠狠地打击报复。 抱着这样的心理,
9.3.5 小结 多线程编程属于比较复杂的程序设计任务,即使对专家也不是容易的事情。这是因为多 线程在执行上具有不确定性,线程一旦启动,他们之间的相互依赖和相互作用的结果就是不 可预测的。《西游记》中的这段描写或许能帮助读者想象多线程并发执行的复杂性: 悟空见他凶猛,即使身外身法,拔一把毫毛,丢在口中嚼碎,望空喷去,叫一声“变”! 即变做三二百个小猴……把个魔王围绕,抱的抱,扯的扯,钻裆的钻裆,扳
18.7. 小结 这一章展示了性能优化的几个重要方面,这里是就 Python 而言,但它们却普遍使用。 如果你要在正则表达式和编写循环间抉择,选择正则表达式。 正则表达式因其是以 C 语言编译的可以本能地在你的计算机上运行,你的循环却以 Python 编写需要通过 Python 解释器运行。 如果你需要在正则表达式和字符串方法间抉择,选择字符串方法。 它们都是以 C 编译的,所以选取简单的。 字典
17.8. 小结 这一章中我们探讨了几个不同的高级技术。他们并不都适用于任何情况。 你现在应该能自如应用如下技术: 应用 正则表达式进行字符串替换。 将 函数当作对象,把它们存于列表中,把它们赋值给变量,并通过变量来调用它们。 构建 应用 lambda 的动态函数。 构建 闭合,将外部变量作为常量构建动态函数。 构建 生成器,进行逻辑递增操作并在每次调用时返回不同值的恢复执行函数。 抽象化,动态构