![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Railscasts学习笔记
RayRiver
这个作者很懒,什么都没留下…
展开
-
#001_实例变量做查询缓存
看了Kevin Yang对初学者的建议,终于决定开始学习Railscasts了,目前一共有99个例子,暂且希望能每天坚持学习至少一个,并以文字的形式表述出来。 [code="ruby"]User.find(session[:user_id])[/code]以上代码每次都会向数据库发起一条查询请求,为了提高性能,只需要多加一个或标记,就可以在已赋值的情况下不再发起查询请求。 [cod...2008-04-01 15:05:54 · 95 阅读 · 0 评论 -
#011_重构用户名 PART2
接着010里面的例子,让我们先写User类的单元测试吧[code="ruby"]require File.dirname(__FILE__) + '/../test_helper'class UserTest < Test::Unit::TestCase fixtures :users def test_full_name_without_middle_initia...2008-04-09 14:34:07 · 106 阅读 · 0 评论 -
#010_重构用户名 PART1
有这么几行视图代码,用来显示英文全名[code="html"]Name: [/code]当我们希望在多个页面内都显示这个全名,是否每次都要写这么4行代码呢?想想我们的DRY原则,放弃这种不优雅的做法吧[code="ruby"]class User < ActiveRecord::Base def full_name nam...2008-04-09 13:50:45 · 86 阅读 · 0 评论 -
#009_过滤日志中的敏感数据
当我们注册用户的时候,在日志中会自动保存一些敏感的字段,比如password等。[code="ruby"]Processing LoginController#save (for 127.0.0.1 at 2008-04-08 13:53:22) [POST] Session ID: b40f205b38bd05382dc8ef2f362f5d5b Parameters: {"us...2008-04-08 14:06:05 · 435 阅读 · 0 评论 -
#008_layouts和content_for
如果我们希望在不同页面使用不同的样式,我们可以使用layouts + content_for,如第8行:[code="html"] Todo List Todo List [/code]...2008-04-07 13:37:57 · 87 阅读 · 0 评论 -
#007_关于layouts
一般说来,layouts有5种:global layouts, controller layouts, shared layouts, dynamic layouts, action layouts.假设有这样一个视图[code="html"]Projects [/code][b]1. global layouts[/b][code="html"]...2008-04-06 14:13:50 · 97 阅读 · 0 评论 -
#006_用to_proc标记缩写代码块
我们经常需要将一个代码块传递给迭代器,并在代码块中调用另一个方法。Rails提供了一条实现这一功能的捷径,于是下面两句代码等价:[code="ruby"]groups = posts.group_by { |post| post.author_id }groups = posts.group_by(&:author_id)[/code]让我们看下这一切是如何工作的:[code="r...2008-04-05 16:27:48 · 131 阅读 · 0 评论 -
#005_使用with_scope
接着004中的例子,004中我们希望找出所有未完成的任务,好吧,我承认,我半途而废的事实在是太多了,也许有几百个上千个,谁知道呢,一张A4纸肯定打不下,也许我应该先列出前20条,一条一条解决以后再去考虑后面的?事实就是这样,我要列出找到的前20条,并且距现在最近的事排在前面最先解决,更加以前的事就算忘了对现在的我也没什么影响。于是按照前面的方法,我们会这样说[code="ruby"]T...2008-04-02 13:45:09 · 136 阅读 · 0 评论 -
#004_将查询移入模型类
根据DHH提出的DRY原则,我们将一个公用的find方法移入model类(比如本例中的查找所有未完成的任务),然后就可以在controller中多次重用,也包括通过表间关联来查找。[code="ruby"]# tasks_controller.rbdef index @tasks = Task.find_incompleteend# models/task.rbdef...2008-04-02 13:07:32 · 71 阅读 · 0 评论 -
#003_通过表间关联来查找
Rails不要求在迁移任务中建立外键约束,在迁移任务中创建project_id字段后在Project和Task模型中加上相应的声明。[code="ruby"]# project.rbhas_many :tasks# task.rbbelongs_to :project# projects_controller.rbdef show @project = Pro...2008-04-01 16:30:58 · 80 阅读 · 0 评论 -
#002_动态find_by方法
[code="ruby"]@tasks = Task.find(:all, :conditions => [ 'complete = ?', false ])@task = Task.find(:first, :conditions => [ 'complete = ?', false ], :order => 'created_at DESC')[/code]以动态的find_by和fi...2008-04-01 15:59:31 · 130 阅读 · 0 评论 -
#012_重构用户名 PART3
[code="ruby"]require File.dirname(__FILE__) + '/../test_helper' class UserTest < Test::Unit::TestCase fixtures :users def test_full_name_without_middle_initial ...2008-04-09 14:56:01 · 68 阅读 · 0 评论