文章转自:http://developer.51cto.com/art/200803/67844.htm
敏捷开发包括一系列的方法,主流的有如下七种:
XP
XP(极限编程)的思想源自 Kent Beck和Ward Cunningham在软件项目中的合作经历。XP注重的核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做 出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。
SCRUM
SCRUM是一种迭代的增量化过程,用于产品开发或工作管理。它是一种可以集合各种开发实践的经验化过程框架。SCRUM中发布产品的重要性高于一切。
...
- 15:53
- 浏览 (140)
- 评论 (0)
- 分类: linux inside
require File.dirname(__FILE__) + '/../test_helper'
class UserTest < Test::Unit::TestCase
fixtures :users
def test_full_name_without_middle_initial
user = User.new(:first_name => 'John', :last_name => 'Doe')
assert_equal 'John Doe', user ...
- 14:56
- 浏览 (83)
- 评论 (0)
- 分类: Railscasts学习笔记
接着010里面的例子,让我们先写User类的单元测试吧
require File.dirname(__FILE__) + '/../test_helper'
class UserTest < Test::Unit::TestCase
fixtures :users
def test_full_name_without_middle_initial
user = User.new(:first_name => 'John', :last_name => 'Doe')
assert_equal 'John Doe', user.full_name ...
- 14:34
- 浏览 (91)
- 评论 (0)
- 分类: Railscasts学习笔记
有这么几行视图代码,用来显示英文全名
Name:
<%= @user.first_name %>
<%= "#{@user.middle_initial}." unless @user.middle_initial.nil? %>
<%= @user.last_name %>
当我们希望在多个页面内都显示这个全名,是否每次都要写这么4行代码呢?
想想我们的DRY原则,放弃这种不优雅的做法吧
class User < ActiveRecord::Base
def full_name
name = first_name ...
- 13:50
- 浏览 (92)
- 评论 (0)
- 分类: Railscasts学习笔记
当我们注册用户的时候,在日志中会自动保存一些敏感的字段,比如password等。
Processing LoginController#save (for 127.0.0.1 at 2008-04-08 13:53:22) [POST]
Session ID: b40f205b38bd05382dc8ef2f362f5d5b
Parameters: {"user"=>{"password_confirmation"=>"aaaaaa111", "login_name"=>"sora", "display_name"=>"Sora", "password"=>"aaaaaa111"} ...
- 14:06
- 浏览 (95)
- 评论 (0)
- 分类: Railscasts学习笔记
如果我们希望在不同页面使用不同的样式,我们可以使用layouts + content_for,如第8行:
<!-- layouts/application.rhtml -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Todo List</title>
<%= styles ...
- 13:37
- 浏览 (83)
- 评论 (2)
- 分类: Railscasts学习笔记
一般说来,layouts有5种:global layouts, controller layouts, shared layouts, dynamic layouts, action layouts.
假设有这样一个视图
<!-- views/projects/index.rhtml -->
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
</ul>
1. global layo ...
- 14:13
- 浏览 (95)
- 评论 (0)
- 分类: Railscasts学习笔记
我们经常需要将一个代码块传递给迭代器,并在代码块中调用另一个方法。Rails提供了一条实现这一功能的捷径,于是下面两句代码等价:
groups = posts.group_by { |post| post.author_id }
groups = posts.group_by(&:author_id)
让我们看下这一切是如何工作的:
class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# ...
- 16:27
- 浏览 (83)
- 评论 (0)
- 分类: Railscasts学习笔记
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dreamhead.blogbus.com/logs/13258146.html
大多数人都愿意与高手共事,因为他们指望着从高手身上可以学到很多东西。在ThoughtWorks,因为要pair,所以,我们可以有更多的机会与高手近距离一起工作。
如果真的有机会和高手一起工作,有时,你会发现,从具体做的事来说,这些高手做的事并不像想象的那么高深,甚至可以说很简单,简单到换了谁都能做。于是,心中的高手形象逐渐开始动摇,难道令N多人景仰的高手就是这个样子。
不知道你有没有想过这样一个问题,同样的事,如果没有高手的 ...
- 16:00
- 浏览 (84)
- 评论 (0)
- 分类: linux inside
移动硬盘有10G因为之前装系统荒废了,于是决定把数据备份出去,重格一下。首先进计算机管理看,我的移动硬盘居然有345G(其实只有60G),看来是出问题了,在这里没法删那个250G的分区。于是进PQMagic,果然,移动硬盘显示状态为BAD,于是删分区格式化应用,结果重启进PQ却中途失败。。接下来再进windows后移动硬盘能识别出来,但无法再对分区进行操作了。
试了很多办法不行,于是挂到本本上,用效率源没有查到坏道,本来也没什么辙,突然发现D版番茄上有个什么DISK MANAGER,不管了,总之试一下,居然轻松帮我格成了FAT32。进win再格成NTFS,本以为一切OK了,谁知道ubuntu ...
- 15:09
- 浏览 (84)
- 评论 (0)
- 分类: Unix/Linux
接着004中的例子,004中我们希望找出所有未完成的任务,好吧,我承认,我半途而废的事实在是太多了,也许有几百个上千个,谁知道呢,一张A4纸肯定打不下,也许我应该先列出前20条,一条一条解决以后再去考虑后面的?
事实就是这样,我要列出找到的前20条,并且距现在最近的事排在前面最先解决,更加以前的事就算忘了对现在的我也没什么影响。于是按照前面的方法,我们会这样说
Task.find_all_by_complete(false, :limit => 20)
进一步的,我们照004中的办法把find移入model,并且使用了with_scope,我们仍然能往find_incomplete里传入ha ...
- 13:45
- 浏览 (80)
- 评论 (0)
- 分类: Railscasts学习笔记
根据DHH提出的DRY原则,我们将一个公用的find方法移入model类(比如本例中的查找所有未完成的任务),然后就可以在controller中多次重用,也包括通过表间关联来查找。
# tasks_controller.rb
def index
@tasks = Task.find_incomplete
end
# models/task.rb
def self.find_incomplete
find_all_by_complete(false, :order => 'created_at DESC')
end
# projects_controller.rb ...
- 13:07
- 浏览 (80)
- 评论 (0)
- 分类: Railscasts学习笔记
Rails不要求在迁移任务中建立外键约束,在迁移任务中创建project_id字段后在Project和Task模型中加上相应的声明。
# project.rb
has_many :tasks
# task.rb
belongs_to :project
# projects_controller.rb
def show
@project = Project.find(params[:id])
@tasks = Task.find(:all, :conditions => [ 'project_id = ? AND complete = ?', @project.id ...
- 16:30
- 浏览 (73)
- 评论 (0)
- 分类: Railscasts学习笔记
@tasks = Task.find(:all, :conditions => [ 'complete = ?', false ])
@task = Task.find(:first, :conditions => [ 'complete = ?', false ], :order => 'created_at DESC')
以动态的find_by和find_all_by方法缩短查询语句,以下代码等效。
@tasks = Task.find_all_by_complete(false)
@task = Task.find_by_complete(false, :order => 'crea ...
- 15:59
- 浏览 (98)
- 评论 (0)
- 分类: Railscasts学习笔记
看了Kevin Yang对初学者的建议,终于决定开始学习Railscasts了,目前一共有99个例子,暂且希望能每天坚持学习至少一个,并以文字的形式表述出来。
User.find(session[:user_id])
以上代码每次都会向数据库发起一条查询请求,为了提高性能,只需要多加一个或标记,就可以在已赋值的情况下不再发起查询请求。
@current_user ||= User.find(session[:user_id])
不过,论坛中的某位高人说了:
hideto 写道看起来不错,但是实际上有问题:
实例变量的作用域是一次请求,即一次请求结束后@current_user这个实 ...
- 15:05
- 浏览 (122)
- 评论 (0)
- 分类: Railscasts学习笔记
- 浏览: 4750 次
- 性别:

- 来自: 南京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
render与redirect_to的区 ...
redirect_to会执行被渲染的那个action,而render不会,这跟你 ...
-- by alanyuqiang -
#008_layouts和content_fo ...
这是最普遍的用法,不知道楼主有没研究过,content_for,yield在不同 ...
-- by alanyuqiang -
#008_layouts和content_fo ...
...
-- by alanyuqiang -
render与redirect_to的区 ...
不错,最近正为这个发愁呢!
-- by evil850209 -
如何在update一条记录的部 ...
theone 写道wiisola 写道theone 写道update_all [ ...
-- by wiisola






评论排行榜