<?xml version="1.0" encoding="utf-8" ?>
<!-- generator="FEEDCREATOR_VERSION" -->
<rss version="2.0" xmlns:sns="http://blog.sina.com.cn/sns">
    <channel>
        <title>李骥平的BLOG</title>
        <description></description>
        <link>http://blog.sina.com.cn/permanentads</link>
        <lastBuildDate>Tue, 05 Jan 2010 16:56:24 GMT+8</lastBuildDate>
        <generator>FEEDCREATOR_VERSION</generator>
        <language>zh-cn</language>
        <copyright>Copyright 1996 - 2009 SINA Inc. All Rights Reserved.</copyright>
        <pubDate>Tue, 05 Jan 2010 08:56:24 GMT+8</pubDate>
        <item>
            <title>台词</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01008krw.html</link>
            <description><![CDATA[<div>
&nbsp;本人出身格格，刚过百日，老王爷就抱着我在桌上打牌，三岁的时候王爷就让我摸牌，四岁的时候老家院教我牌路，五岁的时候我就会打二十九路，两个色子比自己的儿子听话，一副牌上手摸三把，不用看我就知道它是什么，光码牌我就学了三年，抓起牌来，要幺鸡它不敢给我来二饼，要东风它不敢给我来红中，牌掉到地上不用看我知道反正，看下眼神我就知道你想和什么，论输赢银子拿车拉……和你们玩？这就算抬举你们了！"</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01008krw.html#comment</comments>
            <pubDate>Thu, 31 Jan 2008 02:47:34 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01008krw.html</guid>
        </item>
        <item>
            <title>台词</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01008krd.html</link>
            <description><![CDATA[<div>
&nbsp;本人出身格格，刚过百日，老王爷就抱着我在桌上打牌，三岁的时候王爷就让我摸牌，四岁的时候老家院教我牌路，五岁的时候我就会打二十九路，两个色子比自己的儿子听话，一副牌上手摸三把，不用看我就知道它是什么，光码牌我就学了三年，抓起牌来，要幺鸡它不敢给我来二饼，要东风它不敢给我来红中，牌掉到地上不用看我知道反正，看下眼神我就知道你想和什么，论输赢银子拿车拉……和你们玩？这就算抬举你们了！"</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01008krd.html#comment</comments>
            <pubDate>Thu, 31 Jan 2008 02:47:34 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01008krd.html</guid>
        </item>
        <item>
            <title>enable javascript</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01008iti.html</link>
            <description><![CDATA[<div>&nbsp;you enable JavaScript. This is because, on
Windows 2003 Server, JavaScript is disabled by default in Internet
Explorer.<br/>
Workaround: In Internet Explorer, choose Tools &gt; Options &gt;
Internet &gt; Custom Level &gt; Scripting &gt; Active Scripting,
and choose Enable.</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01008iti.html#comment</comments>
            <pubDate>Thu, 24 Jan 2008 15:04:28 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01008iti.html</guid>
        </item>
        <item>
            <title>[转]分手何必再做朋友</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01008bmy.html</link>
            <description><![CDATA[<div>
<div ID="voteAnchor"></DIV>
<div CLASS="lh3" ID="veryContent" STYLE="OVERFLOW: hidden; WIDTH: 100%">
<table CLASS="contentTable" ID="blogContentTable" CELLSPACING="0" CELLPADDING="0">
<tbody>
<tr>
<td STYLE="FONT-SIZE: 12px; WORD-WRAP: break-word" VALIGN="top">
<div ID="blogContainer"><img ID="paperPicArea0" STYLE="DISPLAY: none" SRC="http://imgcache.qq.com/qzone_v4/b.gif" NAME="paperPicArea0"></IMG>
<div ID="paperTitleArea" STYLE="DISPLAY: none" ALIGN="center">
<span ID="paperTitle" STYLE="DISPLAY: block; FONT-WEIGHT: bolder; WORD-BREAK: break-all"></SPAN></DIV>
<img ID="paperPicArea" STYLE="DISPLAY: none" SRC="http://imgcache.qq.com/qzone_v4/b.gif" NAME="paperPicArea"></IMG>我们分手吧，分手之后，我们还是朋友，对吗？”，这是有心人对你讲的话，除了要表现他们的大将风度之外，他们更渴望能新欢旧爱，共聚一堂。&nbsp;&nbsp;&nbsp;&nbsp;<br/>

<br/>
原本相爱的恋人，面对分手，或有不得已的原因，或有不得告人的理由．而分手之后仍要做一对朋友，岂不是把过去的一切又带回自己的生活中？何苦呢？当然，我也不赞成分手之后，变成了敌人、仇家，互相中伤对方，恨不得把对方至于死地。&nbsp;&nbsp;&nbsp;&nbsp;<br/>

<br/>
看到以前的恋人,生活比你幸福,你会不会嫉妒?当以前的恋人,兴奋的带着新恋人做介绍时,即便你装做满不在乎,但心里的滋味......&nbsp;&nbsp;&nbsp;&nbsp;<br/>

<br/>
你又何苦自己找黄莲来嚼呢?如果以前的恋人生活的不幸福,你的旧情加上同情心,一定会想很多......
毕竟,你们以前是相爱的恋人,你们也曾经拥有过美好的爱情生活,面对以前的恋人失意迷茫,你会伸出援助之手吗?你会不会又落进那感情的旋涡呢?&nbsp;&nbsp;&nbsp;&nbsp;<br/>

<br/>
最后,大家都有了新的一半,你继续和以前的旧爱做朋友,新情人心里会怎么想,藕断丝连?新欢肯定心中不满,更可怕得是,在猜疑与辩解中,生成几何关系来.当然,也有一些成功的,但是听起来,总是有丝丝的尴尬.&nbsp;&nbsp;&nbsp;&nbsp;<br/>

<br/>
未曾刻骨铭心,分手后做朋友又谈何容易?看着自己以前的恋人,与别人亲亲我我、欢天喜地,你肯定会有......
何必自己做戏给自己和他们看呢?已经分手了,为什么还要刻意的去维护一种近似超越友谊的关系呢?不如把它封在心里,怀念,或者扔掉它,迎接新的一段生活.&nbsp;&nbsp;&nbsp;&nbsp;<br/>

分手了,何必再要做朋友? 否则,何言分手?</DIV>
<img ID="paperPicArea1" STYLE="DISPLAY: none; POSITION: relative" SRC="http://imgcache.qq.com/qzone_v4/b.gif" NAME="paperPicArea1"></IMG></TD>
</TR>
</TBODY>
</TABLE>
</DIV>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01008bmy.html#comment</comments>
            <pubDate>Sun, 06 Jan 2008 15:57:05 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01008bmy.html</guid>
        </item>
        <item>
            <title>our lives</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01008bmx.html</link>
            <description><![CDATA[<div>&nbsp;<font STYLE="LINE-HEIGHT: 1.3em" FACE="楷体_GB2312"><font STYLE="FONT-SIZE: small; LINE-HEIGHT: 1.3em">越来越觉得，自己面对的是一个无比混乱的世界。不知道改革开放是不是一个错误，不知道经济全球化是不是一个错误，不知道自己出生在80后是不是一个错误，好像人们总是太空虚，太颓废。再也感觉不到红旗飘飘的骄傲，感受不到绿色的阳光。我们的世界，充斥着酒精与性，暧昧与堕落。是道德的沦落，也是人性的缺失。80后，似乎对什么都无所谓，无所谓纪律，只要自己高兴就好；无所谓忠诚，只要自己愿意就好；无所谓明天，只要今天还活着就好。很讽刺的是，美国人个人主义的精髓，我们全部没有领悟。庸俗的我们错把个人主义的糟粕当成了精华，以为自己很放的开，不喜欢约束，追求自我。孰不知，他们自以为是的个性，总在不断伤害关心他们的人。个人主义的死角，如今成了我们这个世界的主流，试问：我们的世界，能不乱吗？</FONT>
<wbr></WBR><br/>
<br/>
<font STYLE="FONT-SIZE: small; LINE-HEIGHT: 1.3em">这样混乱的世界，让我们每个人都不安。可是在80后无所谓表面的背后，我们的落寞又有几个人看得见？或许不是看不见，只是，我们更习惯了黑夜。白天让世界的丑陋无处遁形，同时也让自己的丑陋暴露无疑。不如选择遗忘，遗忘白天的阳光，也一并遗忘自己的初衷。唯一记住的，是还明白自己还活着。害怕夜的漫长，因为夜太静，静到让自己发慌。于是我们勉强撑起了笑，三五成群，不是去哪里买醉，就是去哪里寻HIGH。无止尽地用酒精麻痹自己，点燃了一支烟，一瞬间，真以为自己生活在天堂。天真地以为这样就会忘却了心里的落寞，这样就可以证明自己还活着。不敢奢望爱情，更不敢相信天长地久。以为自己给不了，便认为也没有人能给。如真的动心，也还是深深埋藏起自己的情感，小心翼翼。一旦遇到什么不开心，自以为洒脱的本性立马显露，说分手就分手，仿佛从来没有爱过一样。</FONT>
<wbr></WBR><br/>
<br/>
<font STYLE="FONT-SIZE: small; LINE-HEIGHT: 1.3em">我们就不能醒醒吗？我们就不能做回自己吗？我们为什么就不能大胆去追求我们内心深处想要的美好呢？我们能不能多点责任感？我们能不能好好做一回人？别让个性填满我们全部的生活，别让夜的黑迷了我们的双眼，也别再让自己暗自垂泪，顾影自怜。健健康康，开开心心不好吗？发自内心的微笑，什么也取代不了。别再装作无所谓，别再勉强撑起了笑。要撑起的是我们肩上的责任，要迈出的是我们走向明天的步伐。</FONT>
<wbr></WBR><br/></FONT></DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01008bmx.html#comment</comments>
            <pubDate>Sun, 06 Jan 2008 15:54:35 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01008bmx.html</guid>
        </item>
        <item>
            <title>曾经沧海</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de010089z1.html</link>
            <description><![CDATA[<div>&nbsp;<font FACE="宋体">2008年第一天了，本命年算是送走了，回想2007这一年经历了很多很多，还记得去年那个冬天，模模糊糊只剩下一些隐隐作痛的回忆，忙忙碌碌中总有一个身影陪在我左右，去年圣诞新年那些天，是我最忙碌的时候，可是在家总能感觉到温馨，床上门上都贴着她买的很喜气的小东西，那是我最最辛苦的一年，可是每一天我都觉得幸福的冒泡泡。那些点点滴滴，她为我付出了太多太多，而我，我太自私了，从来不懂得控制自己，从来不能全心全意的像她对我那样对她，这段感情我是个彻头彻尾的失败者，而我又觉得撑的那么辛苦，这么多年我一直想不明白，到底为什么爱不能在我身上永远保持激情，为什么总是要伪善的对待自己的感情，或许是因为自己找不到自己的坐标，或许是对女人缺乏了解，或许自己的要求太高，或许真的是没有碰着那样一个女人，又或许那个女人根本就不存在...我不敢再往下想了。我怕又陷入思维的怪圈，人一辈子只能找一个一生的伴侣，或许是我真的是个完美主义者，可是
..<br/>
我逃脱不了自己给自己的设定的感情枷锁，我甚至在想如果可以，我愿意按照我的思维去创造这样一个女人，一个让我每时每刻都有激情去爱的女人，虽然辛苦，但是幸福。<br/>

一年又一年，我觉得不能用成长或者成熟来形容，只能算是经历自己的经历，感受别人的故事，来获取一些以前没有体会到的东西。现在的我已经不是那个原本单纯的我了，可是又似乎看到我最软弱的一面，我很想很想躺在爱人的怀里享受一种很真实的温馨与慰籍，我想至少那一刻我是无比真实的幸福着。人本身包括生活都充满了矛盾，总不能偏向一边简简单单的活着，要学会安慰自己，学会用思想控制自己，贪婪的我甚至想用思想去控制别人，我总是在不停的积累所有能让自己快乐的资本，没有人是不自私的，自己的快乐只能自己买单。<br/>
</FONT></DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de010089z1.html#comment</comments>
            <pubDate>Tue, 01 Jan 2008 15:55:36 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de010089z1.html</guid>
        </item>
        <item>
            <title>山西科技电子政务系统</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000e77.html</link>
            <description><![CDATA[<div>&nbsp;
<p ALIGN="center"><b>（一）项目的总体策划</B></P>
<p ALIGN="center"><b>一、项目背景</B></P>
<p>
信息化的飞速发展，特别是电子商务发展，必然对作为上层建筑的政府提出挑战。作为庞大信息资源的拥有者，政府自身的信息化建设和服务成为世人关注的焦点。</P>
<p>
一个信息化的政府将成为一个国家或地区在全球竞争中的一个竞争要素，也是提升国家和地区全球竞争力，争得经济和社会发展“先机”的关键。在信息化飞速发展、经济全球化迅速推进的今天，电子政务所起的特殊作用将愈益彰显，电子政务已成为治国不可或缺的工具。</P>
<p>
正因为如此，本世纪一开始，在国际上，各国政府面对以网络经济为标志的信息化革命，对政务模式变革产生了深刻而急迫的需求，电子政务受到世界各国的广泛重视，成为各国积极倡导的信息化中的首要应用领域。根据联合国教科文组织2000年对62个国家（39个发展中国家、23个发达国家）进行的调查，89%的国家都不同程度地着手推动电子政务的发展，并将电子政务列为国家的重要事项。E-Government（电子政务）的浪潮不仅引发了美国、日本、英国等发达国家的再一次竞赛运动，并且，从亚洲、欧洲、澳洲、中东直至拉美等国，无论大国、小国、穷国、富国、发达的或发展中的国家，E-Government已大有席卷全球、引发有关政务模式全面变革运动之势。</P>
<p>
党中央、国务院对政府信息化工作和电子政务建设极其重视，明确提出了“把电子政务建设作为今后一个时期我国信息化的重点，政府先行，带动国民经济和社会发展信息化”的战略方针。2002年8月，中共中央办公厅、国务院办公厅转发了《国家信息化领导小组关于我国电子政务建设的指导意见》，进一步阐述了电子政务建设的重要意义：“电子政务建设事关信息化全局，对于应对加入世贸组织后的挑战，加快政府职能转变，提高行政质量和效率，增强政府监管和服务能力，促进社会监督，实施信息化带动工业化的发展战略，具有十分重要的意义”。</P>
<p>
从发达国家的经验看，在推进信息化事业的进程中，科技起着先导作用。山西省科技厅党组意识到，科技厅作为山西省科技工作的主管部门，应该通过建设与开发科技电子政务系统，推进全省电子政务与政府信息化，进而推动全省的信息化事业健康快速稳步发展，实现“振兴山西、兴晋富民”
的战略。</P>
<p>
2002年，山西省科技厅决定启动“山西省科技厅电子政务建设工程”项目。</P>
<p ALIGN="center"><b>二、项目的目标</B></P>
<p><b>1</B><b>、</B><b>最终目标</B></P>
<p>
利用现代信息技术构造更适合以网络化数字化为主要特征的信息时代的政府结构和运行方式，建立与信息时代相适应的政府形态——科技电子政府。</P>
<p><b>2</B><b>、具体建设目标</B></P>
<p><b>①</B><b>政务的目标：</B></P>
<p>
通过行政技术手段的革新，提升政府自身行政管理效能和效率，实现职能转变、机构重组、政务透明，改善政府形象等目标，进而带动国民经济的全面发展和社会进步。</P>
<p>●
实现办公自动化和公共事务管理和政务运作的电子化、数字化、网络化，实现政府机构内部办公和业务的协同工作，节约行政成本，提高政府的管理和服务效率与效能；</P>
<p>●
将现代信息技术与管理决策方法相结合，强化自身的管理模式，实现科学高效的公共管理，提高决策理性和公共政策的品质，提高决策的科学化程度，增强管理水平和决策能力。</P>
<p>●
通过网络信息技术，改善和社会、民众的沟通渠道、方式，以民众需求为导向，更好地为社会和公众提供更加个性化的优质全面公共服务，提高政府行为的公开化、透明化、公正化程度，增强民众对政府政务的参与程度，提高政府决策的透明度。</P>
<p>●
通过电子政务，促进政府部门间的信息资源共享和业务间的协同工作。</P>
<p><b>②</B><b>系统建设目标：</B></P>
<p>
根据政务目标，系统建设主要围绕政府部门内部、部门之间和部门与公众之间这三条主线。</P>
<p>●
通过科技厅内网建设，逐步实现电子化和网络化办公。根据改革和发展的需求对管理和服务工作、工作和业务流程等进行优化。实现内部办公自动化与协同办公，提高单位内部办公效率和办公质量。同时，以科技厅的职能为主导，以厅内各项工作和业务为要素和内容，将现代信息技术与管理决策方法相结合，有计划、分步骤地去开发相关支持软件和信息系统，提高决策的科学化程度，增强管理水平和决策能力，推进政府职能的转化。</P>
<p>●
构建标准统一、功能完善、安全可靠的政务信息与公共服务网络平台，开发科技厅门户网站，实现信息的及时发布，政府信息资源为社会与公众共享，为广大群众提供信息服务，实现政府与公众之间的双向信息交流，加强与人民的沟通和联系。开发网上应用系统，实现项目、成果等科技厅主要业务的网上在线申报、处理等，实现政务公开，推进民主化进程。</P>
<p>●
逐步实现与省政府及相关厅局和部门、与科技部及地市县科技局、与相关企业、科研院所等网络连通，通过网络实现信息共享和实时通信。进而实现政府部门间的业务协同工作。</P>
<p><b>3</B><b>、辅助目标</B></P>
<p>
<b>（1）将</B><b>科技电子政务系统的建设作为我省具有示范意义的电子政务工程</B></P>
<p>
政府作为信息化的积极倡导者、推动者和实践者，其自身的信息化建设对于其他领域的信息化具有重要的示范作用。科技是第一生产力，科技领域的信息化就更加重要与迫切。山西省科技厅作为主管全省科技工作的政府职能机构，必须在信息化、网络化、服务化方面走在全省最前头，有责任在推动全省电子政务发展方面起到引导、示范作用，在建设指导思想、建设模式、职能转变、技术路线、组织实施等方面创造经验，以推动我省电子政务的健康、快速发展。</P>
<p><b>（2）带动信息产业的发展</B></P>
<p>
根据党中央、国务院关于“把电子政务建设作为今后一个时期我国信息化的重点，政府先行，带动国民经济和社会发展信息化”的战略方针和“拉动我国信息产业的发展”的指示精神，我们将“带动信息产业的发展”和“带动国民经济和社会发展信息化”作为科技电子政务系统建设的辅助目标和任务之一。</P>
<p><b>（3）</B><b>提高科技厅公务员的信息化意识和素质</B></P>
<p>
通过科技电子政务系统的建设，在强化政府的信息处理能力、推进科技厅职能转化进程、提高整体科学化管理决策水平的同时，通过建立和不断健全科技厅公务员信息化与电子政务的培训与考核制度，切实有效地开展公务员的电子政务知识与技能的培训，制定考核标准与制度，不断提高全厅公务员的信息化素质与在电子政务环境下的各种技能，真正发挥电子政务的效能，推进电子政务应用水平，提升公务员的现代管理观念和科技素质。</P>
<p ALIGN="center"><b>三、项目实施的</B>指导思想和原则</P>
<p>为了实现项目的目标，必须制定保证项目实施的指导思想和原则。</P>
<p><b>1</B><b>、</B><b>指导思想</B></P>
<p>
以适应改革开放和现代化建设对政务工作的要求为准则，以需求为导向，以信息技术为手段，以资源整合为基础，切实发挥电子政务实效，提高行政效率，提高科技管理水平，提高公共服务能力。通过电子政务应用，全面提高政府工作的执行力，推进政府职能的转变，加快建设廉洁、勤政、务实、高效的政府，推进我省科技创新和社会全面进步，更好地服务人民群众。</P>
<p><b>2</B><b>、</B><b>实施原则</B></P>
<p>●&nbsp; 政务为主导的原则</P>
<p>●&nbsp; 总体规划、分步实施的原则</P>
<p>●&nbsp; 政务指标体系的规范化和标准化建设的原则</P>
<p>●&nbsp; “数据与信息”为基础的原则</P>
<p>●&nbsp;
业务人员与技术人员紧密配合与深层次有机结合的原则</P>
<p>●&nbsp;
改造与建设相结合、注意保护原有投资的原则</P>
<p>●&nbsp; 创新性原则</P>
<p>●&nbsp; 系统性原则</P>
<p>●&nbsp; 以政府、企业和社会公众为行为主体的原则</P>
<p>● “第一把手”原则</P>
<p ALIGN="center"><b>四、项目实施的</B>方针、策略与技术路线<a NAME="_Toc168200834"></A></P>
<p><b>1</B><b>、总体方针</B></P>
<p>
政务主导，规划先行，夯实应用，稳步实施，扎扎实实推进电子政务建设。</P>
<p><b>2</B><b>、实施策略</B></P>
<p>●&nbsp;
规划先行（规划的方针：审慎规划。想得要大，起步要小而稳，扩张要快，正确处理电子政务建设各种关系，合理规划电子政务建设各阶段的目标）</P>
<p>●&nbsp;
加强电子政务的理论研究（电子政务的共性及科技电子政务的个性）</P>
<p>●&nbsp; 抓好电子政务的顶层设计</P>
<p>●&nbsp;
重视基础性建设工作（数据和信息的采集和管理工作、认真建立与不断完善科技管理指标体系、抓好开发的基础工作）</P>
<p>●&nbsp;
以业务流为主线开展电子政务的应用开发工作</P>
<p>●&nbsp;
从基础信息系统建设抓起，抓突破口、分类搞试点、一点点夯实应用、稳步推进电子政务建设</P>
<p>●&nbsp; 按照现代软件工程的方法组织实施</P>
<p><b>3</B><b>、</B><a NAME="_Toc168200835"><b>技术路线</B></A></P>
<p>●&nbsp; 以应用为先导</P>
<p>●&nbsp; 技术的实用性和先进性的有机统一</P>
<p>●&nbsp; 走以开发自主知识产权软件为主</P>
<p>●&nbsp; 尽可能采用国产化设备与软件</P>
<p>●&nbsp; 坚持采用协同工作的原理、方法和技术</P>
<p>●&nbsp;
坚持采用现代软件工程与敏捷思维相结合的方法进行项目管理、组织开发实施</P>
<p>系统分析</P>
<p>&nbsp;</P>
<p>问题与思考</P>
<p>
1、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
根据项目的背景与目标，你认为该项目如何规划？</P>
<p>
<b>2、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</B>
根据项目实施的方针、策略与技术路线，你认为该项目应如何实施？要采用技术？</P>
<p>&nbsp;</P>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000e77.html#comment</comments>
            <pubDate>Wed, 28 Nov 2007 04:49:32 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000e77.html</guid>
        </item>
        <item>
            <title>什么是web2.0标准</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000e76.html</link>
            <description><![CDATA[<div>&nbsp;
<h3>&nbsp;</H3>
<p>
　　WEB标准不是某一个标准，而是一系列标准的集合。网页主要由三部分组成：结构（Structure）、表现（Presentation）和行为（Behavior）。对应的标准也分三方面：结构化标准语言主要包括XHTML和XML，表现标准语言主要包括CSS，行为标准主要包括对象模型（如W3C
DOM）、ECMAScript等。这些标准大部分由W3C起草和发布，也有一些是其他标准组织制订的标准，比如ECMA（European
Computer Manufacturers
Association）的ECMAScript标准。我们来简单了解一下这些标准：</P>
<br/>
<strong>一．结构标准语言</STRONG><br/>
<ul>
<li>［ＸＭＬ］XML是The Extensible Markup
Language(可扩展标识语言)的简写。目前推荐遵循的是W3C于2000年10月6日发布的XML1.0，参考（www.w3.org/TR/2000/REC-XML-20001006）。和HTML一样，XML同样来源于SGML，但XML是一种能定义其他语言的语。XML最初设计的目的是弥补HTML的不足，以强大的扩展性满足网络信息发布的需要，后来逐渐用于网络数据的转换和描述。关于XML的好处和技术规范细节这里就不多说了，网上有很多资料，也有很多书籍可以参考。</LI>
<li>［ＸＨＴＭＬ］XHTML是The Extensible HyperText Markup
Language可扩展标识语言的缩写。目前推荐遵循的是W3C于2000年1月26日推荐XML1.0（参考<a HREF="http://www.w3.org/TR/2000/REC-XML-20001006" TARGET="_blank" REL="external">www.w3.org/TR/xhtml1</A>）。XML虽然数据转换能力强大，完全可以替代HTML，但面对成千上万已有的站点，直接采用XML还为时过早。因此，我们在HTML4.0的基础上，用XML的规则对其进行扩展，得到了XHTML。简单的说，建立XHTML的目的就是实现HTML向XML的过渡。</LI>
</UL>
<strong>二. 表现标准语言</STRONG>
<p>　　CSS是Cascading Style
Sheets层叠样式表的缩写。目前推荐遵循的是W3C于1998年5月12日推荐CSS2（参考<a HREF="http://www.w3.org/TR/CSS2/" TARGET="_blank" REL="external">www.w3.org/TR/CSS2</A>）。W3C创建CSS标准的目的是以CSS取代HTML表格式布局、帧和其他表现的语言。纯CSS布局与结构式XHTML相结合能帮助设计师分离外观与结构，使站点的访问及维护更加容易。</P>
<br/>
<strong>三.行为标准</STRONG>
<ul>
<li>[ＤＯＭ]DOM是Document Object Model文档对象模型的缩写。根据W3C
DOM规范（http://www.w3.org/DOM/），DOM是一种与浏览器，平台，语言的接口，使得你可以访问页面其他的标准组件。简单理解，DOM解决了Netscaped的Javascript和Microsoft的Jscript之间的冲突，给予web设计师和开发者一个标准的方法，让他们来访问他们站点中的数据、脚本和表现层对像。</LI>
<li>［ＥＣＭＡＳｃｒｉｐｔ］ECMAScript是ECMA(European Computer
Manufacturers
Association)制定的标准脚本语言（JAVAScript）。目前推荐遵循的是ECMAScript
262（<a HREF="http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM" TARGET="_blank" REL="external">www.ecma.ch/ecma1/STAND/ECMA-262.HTM</A>）。</LI>
</UL>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000e76.html#comment</comments>
            <pubDate>Wed, 28 Nov 2007 04:48:59 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000e76.html</guid>
        </item>
        <item>
            <title>网上邻居不显示本地连接</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cwh.html</link>
            <description><![CDATA[<div>&nbsp;综合起来,试试如下操作<br/>
1. 开始,运行,输入serviecs.msc打开服务页面,找到Remote Procedure Call
(RPC)将其设置为自动启动,并将其启动<br/>
2. 服务页面中,找到Network
Connections服务,将其设置为自动启动,并将其启动<br/>
3. 服务页面中,找到PLUG AND PLAY将其设置为自动启动,并将其启用<br/>
<br/>
4. 重新注册以下组件<br/>
开始,运行,输入<br/>
regsvr32 netshell.dll回车<br/>
输入<br/>
regsvr32 netcfgx.dll回车<br/>
输入<br/>
regsvr32 netman.dll回车<br/>
然后重新启动计算机</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cwh.html#comment</comments>
            <pubDate>Mon, 19 Nov 2007 11:55:04 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cwh.html</guid>
        </item>
        <item>
            <title>PDF与doc格式互换</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cwg.html</link>
            <description><![CDATA[<div><br/>
<br/>
<p>在当今的计算机世界里，使用率最高的两种文档方式分别是Microsoft
Word的Doc格式和Adobe
Acrobat的Pdf格式文件。由于微软的渗透，我们现在所使用的绝大部分文稿或报告的格式都是Doc的，而Pdf格式的文件由于其在网络上传输的便利和安全性，也被广泛的使用。但两者由于所处的公司不同，出于商业目的，互相不能直接打开使用。因此，也就给我们广大的文件用户增添了很大的麻烦。</P>
<p>1、Doc格式文件转换为Pdf文件</P>
<p>Doc文件向Pdf格式转换还是比较容易的，主要通过Adobe
公司提供的Adobe Distiller虚拟服务器实现的，在安装了Adobe
Acrobat完全版后，在Windows系统的打印机任务中就会添加一个Acrobat
Distiller打印机，现在比较流行的DoctoPdf类软件如Pdfprint等的机理都是调用Adobe
Distiller打印机实现的，如果想把一个Doc文件转换为Pdf文件，只要用Office
Word打开该Doc文件，然后在“文件”—&gt;“打印”中选择Acrobat
Distiller打印机即可。<br/>
这样，就可以很轻松的将Doc格式的文件转换为Pdf文件。</P>
<p>2、Pdf格式文件转换为Doc文件</P>
<p>
Pdf格式文件向Doc文件转换相对比较难，因为Pdf格式与Doc格式解码格式不同，在Pdf下的回车符、换行符以及相关的图片格式无法直接转换为Doc文件，笔者之前一直使用复制文本，然后粘贴到Word中实现Pdf向Doc格式的转换。</P>
<p>今天突然发现了一款非常好的Pdf向Doc格式转换的工具，ScanSoft PDF
Converter for Microsoft Word
v1.0。它是由ScanSoft公司同微软共同组队开发了一个全新的Office 2003
插件。该插件可以帮助你通过Word直接将Pdf文档转换为Word文档，并且完全保留原来的格式和版面设计。</P>
<p>这个名为 ScanSoft PDF Converter for Microsoft Word
的插件是首先捕获Pdf文档中的信息，分离文字同图片，表格和卷，再将其统一到Word格式。现在你可以重新利用早先你从网络上下载或Email中收到的Pdf文件中的信息，而无需添加任何其他软件。</P>
<p>ScanSoft PDF Converter for Microsoft 已经非常紧密的同Office
2003整合在一起了，有两种方式可以将Pdf格式转换成Doc文件。</P>
<p>第一种方式，在Microsoft Word
2003中你可以直接通过“文件”—&gt;“打开”来打开Pdf文件。ScanSoft
PDF Converter for Microsoft
Word插件会自动弹出了，经过转换后我们就可以得到想要的Doc文件。</P>
<p>第二种方式，ScanSoft公司也已经开发了基于此的Smart Tag(Office
2003中重要的功能元件)能够轻松的通过右键来将PDF文件转换成为
Microsoft Word 文件。<br/>
注意，在安装ScanSoft PDF Converter for Microsoft
Word的时候建议关闭正在运行的Office Word，Internet
Explorer和Outlook等软件。</P>
<p>利用Microsoft Office Word
2003自己的功能即可实现转换。当然首先安装Microsoft Office
2003，再打开pdf文件，点击打印，用Microsoft Office
2003自带的Microsoft Office Document Image Writer
D虚拟打印机，打印需要的页码，然后按”确定“，则立即自动变为另存为（以mdi格式），选好另存的地址，点击”保存“，则立即自动打开保存的mdi格式的文件，再点击mdi格式文件的“工具”中的“使用OCR识别文本”（根据文本的多少可能需要点时间）识别完后再点击“工具”中的”将文本发送到Word“，则万事OK。此时，原来PDF上的文本已经转换到Word上来了，可以自由复制粘贴了。<br/>

大家尽可一试，我的所有PDF文本都可实现转换。</P>
<p>ScanSoft PDF Converter 2.0<br/>
<a HREF="http://fs.mydown.com/soft/200510/ScanSoft_PDF_Converter_v2.0.KG.rar" TARGET="_blank">http://fs.mydown.com/soft/200510/ScanSoft_PDF_Converter_v2.0.KG.rar</A></P>
<p><br/>
AdbeRdr80_zh_CN.zip<br/>
<a HREF="http://xbol2.skycn.com/down/AdbeRdr80_zh_CN.zip" TARGET="_blank">http://xbol2.skycn.com/down/AdbeRdr80_zh_CN.zip</A></P>
<hr SIZE="1"></HR></DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cwg.html#comment</comments>
            <pubDate>Mon, 19 Nov 2007 07:51:12 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cwg.html</guid>
        </item>
        <item>
            <title>美国人嘴边的最酷口语</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cug.html</link>
            <description><![CDATA[<div>&nbsp;thousand times no! 绝对办不到！<br/>
Don't mention it. 没关系，别客气。<br/>
Who knows! 天晓得！<br/>
It is not a big deal! 没什么了不起！<br/>
How come… 怎么回事，怎么搞的。<br/>
Easy does it. 慢慢来。<br/>
Don't push me. 别逼我。<br/>
Come on! 快点，振作起来！<br/>
Have a good of it.玩的很高兴。<br/>
It is urgent. 有急事。<br/>
What is the fuss？ 吵什么？<br/>
Still up？ 还没睡呀？<br/>
It doesn't make any differences. 没关系。<br/>
Don't let me down. 别让我失望。<br/>
God works. 上帝的安排。<br/>
Don't take ill of me. 别生我气。<br/>
Hope so. 希望如此。<br/>
Go down to business. 言归正传。<br/>
None of my business. 不关我事。<br/>
It doesn't work. 不管用。<br/>
I'm not going. 我不去了。<br/>
Does it serve your purpose？ 对你有用吗？<br/>
I don't care. 我不在乎。<br/>
Not so bad. 不错。<br/>
No way! 不可能！<br/>
Don't flatter me. 过奖了。<br/>
Your are welcome. 你太客气了。<br/>
It is a long story. 一言难尽。<br/>
Between us. 你知，我知。<br/>
Big mouth! 多嘴驴！<br/>
Sure thin! 當然！<br/>
I''m going to go. 我這就去。<br/>
Never mind. 不要緊。<br/>
Can－do. 能人。<br/>
Close－up. 特寫鏡頭。<br/>
Drop it! 停止！<br/>
Bottle it! 閉嘴！<br/>
Don''t play possum! 別裝蒜！<br/>
There is nobody by that name working here.這裡沒有這個人。<br/>
He neither drinks nor smokes. 他既不喝酒也不抽煙。<br/>
Break the rules. ?#96;反規則。<br/>
How big of you! 你真棒！<br/>
Poor thing! 真可憐！<br/>
Nuts! 呸；胡說；混蛋<br/>
Make it up! 不记前嫌！<br/>
Watch you mouth. 注意言辞。<br/>
Any urgent thing？ 有急事吗？<br/>
How about eating out？ 外面吃饭怎样？<br/>
Don't over do it. 别太过分了。<br/>
Can you dig it？ 你搞明白了吗？<br/>
I'm afraid I can't. 我恐怕不能。<br/>
You want a bet？ 你想打赌吗？<br/>
What if I go for you？ 我替你去怎么样？<br/>
Who wants？ 谁稀罕？<br/>
December heartbeat. 黄昏恋。<br/>
Follow my nose. 凭直觉做某事。<br/>
Cheap skate! 小气鬼！<br/>
Go to hell！ **吧！<br/>
Come seat here. 来这边坐。<br/>
Good luck! 祝你好运！<br/>
Gild the lily. 画蛇添足。<br/>
Make it. 达到目的，获得成功。<br/>
I'll be seeing you. 再见。<br/>
He has an ax to grind. 他另有企图。<br/>
I wonder if you can give me a lift？ 能让我搭一程吗？<br/>
It is raining. 要下雨了。<br/>
Can I have this. 可以给我这个吗？<br/>
I might hear a pin drop. 非常寂静。<br/>
Why are you so sure？ 怎么这样肯定？<br/>
Is that so？ 是这样吗？<br/>
Don't get loaded. 别喝醉了。<br/>
Stay away from him. 别*近他。<br/>
Don't get high hat. 别摆架子。<br/>
Right over there. 就在那里。<br/>
Doggy bag. 打包袋。<br/>
That rings a bell. 听起来耳熟。<br/>
Sleeping on both ears. 睡的香。<br/>
Play hooky. 旷工、旷课。<br/>
I am the one wearing pants in the house. 我当家。<br/>
It's up in the air. 尚未确定。<br/>
Side dish. 配菜。<br/>
I am all ears. 我洗耳恭听。<br/>
Get cold feet. 害怕做某事。<br/>
Good for you! 好得很！<br/>
Go ahead. 继续。<br/>
Help me out. 帮帮我。<br/>
Let's bag it. 先把它搁一边。<br/>
Lose head. 丧失理智。<br/>
Talk truly. 有话直说。<br/>
He is the pain on neck. 他真让人讨厌。<br/>
Do you have straw？ 你有吸管吗？<br/>
You bet! 一定，当然！<br/>
That is a boy! 太好了，好极了！<br/>
It's up to you. 由你决定。<br/>
The line is engaged. 占线。<br/>
My hands are full right now. 我现在很忙。<br/>
Don't make up a story. 不要捏造事实。<br/>
Absence makes the heart grow fonder. 小别胜新婚。<br/>
She make a mess of things. 她把事情搞得一塌糊涂。<br/>
Get an eyeful. 看个够。<br/>
He has a quick eye. 他的眼睛很锐利。<br/>
Shoot the breeze. 闲谈。<br/>
Tell me when! 随时奉陪！<br/>
It is a small world! 世界真是小！<br/>
Not at all. 根本就不（用）。<br/>
Let's play it by ear. 让我们随兴所至。<br/>
Wait and see. 等着瞧。<br/>
Why so blue？ 怎么垂头丧气？<br/>
What brought you here？ 什么风把你吹来了？<br/>
Hang on! 抓紧（别挂电话）！<br/>
Leave me alone. 别理我。<br/>
Chin up. 不气 ，振作些。<br/>
You never know. 世事难料。<br/>
High jack! 举起手来（抢劫）！<br/>
Why die she marry a man old enough to be her father？<br/>
她为什么要嫁给一个年龄与她父亲相当的男人？<br/>
I stay at home a lot. 我多半在家里。<br/>
She'll be along in a few minutes. 他马上会过来。<br/>
I'm not it a good mood. 没有心情（做某事）。<br/>
He is a fast talker. 他是个吹牛大王。<br/>
I'm bored to death. 我无聊死了。<br/>
Bottoms up! 干杯！<br/>
Daring! 亲爱的！<br/>
Here we are! 我们到了！<br/>
I lost my way. 我迷路了。<br/>
She is still mad at me. 她还在生我的气。<br/>
I'll get even with him one day. 我总有一天跟他扯平<br/>
Hit the ceiling. 大发雷霆。<br/>
She's got quite a wad. 她身怀巨款。<br/>
I don't have anywhere to be. 没地方可去。<br/>
I'm dying to see you. 我很想见你。<br/>
I swear by the god. 我对天发誓。<br/>
Nothing tricky. 别耍花招。<br/>
You might at least apologize. 你顶多道个歉就得了。<br/>
Price is soaring, if it goes on like this, we shall not be able to
keep the pot boiling.<br/>
物价直线上升，这样子下去，我们锅里可没什么东西煮饭。<br/>
None of you keyhole. 不准偷看。<br/>
Come on, be reasonable. 嗨，你怎么不讲道理。<br/>
When are you leaving？ 你什么时候走？<br/>
You don't say so. 未必吧，不至于这样吧。<br/>
Don't get me wrong. 别误会我。<br/>
You don't seem to be quite yourself today.
你今天看起来不大对劲。<br/>
Do you have any money on you？ 你身上带钱了吗？<br/>
What is you major？ 你学什么专业？<br/>
My girlfriend and I broke up. 我和我的女朋友吹了。<br/>
It was something that happens once in the blue moon.
这是千载难逢的事。<br/>
It is a deal！ 一言为定！<br/>
I'll kick you ***. 我将炒你鱿鱼。<br/>
Dinner is on me. 晚饭我请。<br/>
Say hello to everybody for me. 替我向大家问好。<br/>
Not precisely! 不见得，不一定！<br/>
That is unfair. 这不公平！<br/>
We have no way out. 我们没办法。<br/>
That is great! 太棒了！<br/>
You are welcome! 别客气！<br/>
I have to be late and keep my date waiting.
我不喜欢迟到而让别人久等。<br/>
Would you mind making less noise. 能不能小声点。<br/>
It doesn't take much of you time. 这不花你好多时间。<br/>
Not in the long run. 从长远来说不是这样的。<br/>
It is of high quality. 它质量上乘。<br/>
There is nobody by that name working here. 这里没有这个人。<br/>
He neither drinks nor smokes. 他既不喝酒也不抽烟。<br/>
He pushes his luck. 他太贪心了。<br/>
Break the rules. 违反规则。<br/>
How big of you! 你真棒！<br/>
Poor thing! 真可怜！<br/>
Nuts! 呸；胡说；混蛋！<br/>
Blast! **！<br/>
Boy! （表示惊奇，兴奋等）哇！好家伙！<br/>
Get out of here! 滚出去！<br/>
I can't make both ends meet. 我上个月接不到下个月，缺钱。<br/>
It can be a killer. 这是个伤脑筋的问题。<br/>
Dead end. 死胡同。<br/>
Take a seat! 请坐！<br/>
Here ye! 说得对！<br/>
You ask for it! 活该！<br/>
You don't say! 真想不到！<br/>
Fresh paint! 油漆未干！</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cug.html#comment</comments>
            <pubDate>Thu, 15 Nov 2007 04:51:54 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cug.html</guid>
        </item>
        <item>
            <title>netbeans 6初体验</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cqk.html</link>
            <description><![CDATA[<DIV>&nbsp;今天用了一下netbeans IDE
6..感觉真是爽。。</DIV>
<DIV>1.安装jdk 6u3 windows i586-p.exe</DIV>
<DIV>2.装netbeans IDE 6 beta 2</DIV>
<DIV>
纯E文环境，不过使用起来比aptana舒服多了，关键字，格式。。</DIV>
<DIV>支持ruby &amp; rails</DIV>
<DIV>另外，写纯ruby(*.rb)的情况</DIV>
<DIV>netbeans
以project为单位，所以先建一个project再写ruby，才能f6运行</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;１、自动补齐+文档提示（Ctrl + Space或Ctrl +
\）；<br/>
２、方法间跳转－按Ctrl同时点击方法名会自动跳转到定义该方法的源文件处（在所有GEM中跳转）；<br/>

３、格式化。
<P>还不能工作或者很好工作的功能有：<br/>
１、Debug<br/>
２、Rails工程中的lib目录竟然没有包括到自动分析目录中<br/>
３、运行工程有问题。</P>
<P>安装方法：<br/>
１、到http://www.netbeans.info/downloads/dev.php选择Q-Build，下载安装NetBeans<br/>

２、安装完毕后，进菜单Tools -&gt; Update Center<br/>
３、点Next，等所有可升级模块出来后，找到Ruby文件夹，点选到需要更新的模块中（一共会有九个文件被选择）<br/>

４、按指令完成更新，重启NetBeans。</P>
<P>设置方法：<br/>
１、进菜单Tools -&gt; Options，点左边miscellaneous，点右边Ruby
Installation<br/>
２、将所有Ruby工具指向你的ruby安装目录中的相应工具，注意除ruby选ruby.exe外，其余的rake,
rails, rdoc 均选择没有任何后缀的文件，不要选*.bat, *.cmd文件。</P>
<P>建项目文件：<br/>
１、File -&gt; New Project<br/>
２、Ruby -&gt; Ruby on Rails
Application，这时将自动生成rails缺省目录树<br/>
３、将已有的rails项目目录树全部覆盖拷贝到NetBeans建的这个项目目录中。</P>
<P>
第一次建Ruby项目时，NetBeans会扫Ruby安装目录，生成参考视图，这可能需要一些时间。</P>
<P>备注：<br/>
１、如果你用的是Windows中文版，不喜欢NetBeans界面中的英文字体，可以在NetBeans安装目录的etc/netbeans.conf文件中改为：<br/>

netbeans_default_options="-J-Xms32m -J-Xmx128m -J-XX:PermSize=32m
-J-XX:MaxPermSize=160m -J-Dnetbeans.logger.console=true -J-ea
-J-Dapple.laf.useScreenMenuBar=true -J-Duser.language=en
-J-Duser.country=US --fontsize 11"<br/>
２、默认的编辑字体是monospace，你可以到Tools -&gt; Options 中选Font
&amp;&amp; Color，将其改掉，改default font项即可。一般用Lucida Sans
TypeWriter效果最好。</P>
</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cqk.html#comment</comments>
            <pubDate>Mon, 05 Nov 2007 13:32:54 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cqk.html</guid>
        </item>
        <item>
            <title>rails lesson5</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cot.html</link>
            <description><![CDATA[<DIV>&nbsp;
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
测试数据：</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">1.</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">用可控的方式来填充数据，使用迁移任务。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">E:\rails\work\depot&gt;ruby script/generate migration
add_test_data

</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
修改</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">003_add_test_data.rb:</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">#---</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">#
Excerpted from "Agile Web Development with Rails, 2nd
Ed."</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"># We make
no guarantees that this code is fit for any purpose.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"># Visit
http://www.pragmaticprogrammer.com/titles/rails2 for more book
information.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">#---</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">class
AddTestData &lt; ActiveRecord::Migration</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
def self.up</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
Product.delete_all</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
Product.create(:title =&gt; 'Pragmatic Project
Automation',</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:description =&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
%{&lt;p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;em&gt;Pragmatic Project Automation&lt;/em&gt; shows you how to
improve the</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
consistency and repeatability of your project's procedures
using</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
automation to reduce risk and errors.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;/p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
Simply put, we're going to put this thing called a computer to
work</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
for you doing the mundane (but important) project stuff. That
means</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
you'll have more time and energy to do the really</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exciting---and difficult---stuff, like writing quality
code.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;/p&gt;},</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:image_url =&gt;<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
'/images/auto.jpg',<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:price =&gt; 29.95)</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
Product.create(:title =&gt; 'Pragmatic Version Control',</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
:description =&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
%{&lt;p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
This book is a recipe-based approach to using Subversion that
will</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
get you up and running quickly---and correctly. All projects
need</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
version control: it's a foundational piece of any
project's</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
infrastructure. Yet half of all project teams in the 

U.S. don't use</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>any
version control at all. Many others don't use it well, and
end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
up experiencing time-consuming problems.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;/p&gt;},</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:image_url =&gt; '/images/svn.jpg',</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:price =&gt; 28.50)</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
# . . .</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
Product.create(:title =&gt; 'Pragmatic Unit Testing
(C#)',</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:description =&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
%{&lt;p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
Pragmatic programmers use feedback to drive their development
and</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
personal processes. The most valuable feedback you can get
while</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
coding comes from unit testing.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;/p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;p&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>Without
good tests in place, coding can become a frustrating game
of</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
"whack-a-mole." That's the carnival game where the player strikes
at a</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
mechanical mole; it retreats and another mole pops up on the
opposite side</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
of the field. The moles pop up and down so fast that you end up
flailing</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
your mallet helplessly as the moles continue to pop up where you
least</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
expect them.</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
&lt;/p&gt;},</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:image_url =&gt; '/images/utc.jpg',</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
:price =&gt; 27.75)</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
def self.down</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
Product.delete_all</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
end</SPAN></P>
<DIV STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
<P CLASS="MsoNormal" STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm">
<SPAN LANG="EN-US" XML:LANG="EN-US">end</SPAN></P>
</DIV>
<P CLASS="MsoNormal"><SPAN STYLE="BACKGROUND: purple; COLOR: white; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-highlight: purple">
这个文件可以拷贝。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="BACKGROUND: purple; COLOR: white; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-highlight: purple">
顺便把图片和</SPAN><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">depot.css</SPAN><SPAN STYLE="BACKGROUND: purple; COLOR: white; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-highlight: purple">也拷贝到</SPAN><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">public\image</SPAN><SPAN STYLE="BACKGROUND: purple; COLOR: white; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-highlight: purple">和</SPAN><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">public\stylesheets</SPAN><SPAN STYLE="BACKGROUND: purple; COLOR: white; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-highlight: purple">目录下！</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="BACKGROUND: purple; COLOR: white; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-highlight: purple">
执行数据迁移！</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">E:\rails\work\depot&gt;rake db:migrate</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
引用</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">CSS</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">样式！：</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
在</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">E:\rails\work\depot\app\views\layouts</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">下有一个</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">admin.rhtml</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的文件，打开可以看到这个地方：</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN> &lt;%=
stylesheet_link_tag 'scaffold' %&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
这句话就是引用样式，现在我们添加</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">depot.css</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">上去，所以这句话就修改成：</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
&lt;%= stylesheet_link_tag 'scaffold' ,'depot' %&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
接下来就是修改</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">/app/views/admin/list.rhtml</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">了！</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
拷贝一下</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
现在在浏览器中输入</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US"><A HREF="http://localhost:3000/admin/list">http://localhost:3000/admin/list</A></SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">就可以看到。。。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
为什么我的没看到。操</SPAN></P>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cot.html#comment</comments>
            <pubDate>Fri, 02 Nov 2007 06:44:00 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cot.html</guid>
        </item>
        <item>
            <title>rails lesson4</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cos.html</link>
            <description><![CDATA[<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
刚才只是添加了一个验证代码，控制了</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">3</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">个字段不能为空</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">image url,title,description</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">，现在使用</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">validates_numericality_of ()</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
方法，来检查价格是否合法的数值！</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
光用这个方法，在页面中的反映就是，如果你输入的不是一个数字，就会提示</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">

&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
现在我们来再加一点东西：检查价格字段的值大于</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">0</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">，这就需要我们编写一个名为</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">validate()</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的方法，</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">在保存</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">product</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">实例之前会自动调用这个方法，因此可以用它来检查字段的合法性，我们之所以要将这个方法的可见性定为</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">protected,</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">是因为该方法必须在特定的模型上下文中调用，不能在外部随便调用。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">protected</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">def validate</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
<SPAN STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple">errors.add(:price,
“should be at least 

0.01”) if price.nil? || price&lt;0.01</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">#error.add()</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
方法的第一个参数是字段的名称，第二个参数则是出错信息的正文。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
这里注意一下，在将价格和</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">0.01</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">比较之前，先应该检查一下它是不是</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">nil</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">。这个步骤很重要：如果用户将价格字段留空，浏览器就不会向应用程序传递任何价格数据，</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">price</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">变量也不会被设值，如果试图将这个</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">nil</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">值与</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">0.01</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">进行比较，就会发生一个异常。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
还有两样东西需要验证，首先，我们希望确保每样货品都有一个独一无二的名称，这必须在</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">product</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">模型类中添加一行代码，</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">会执行一个简单的检查，以确保</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">products</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">表中的其他记录的</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">title</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">字段与我们将要保存的记录都不相同。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">validates_uniqueness_of :title</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
最后，我们验证</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;image_URL</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">合法性，可以用</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">validates_format_of()</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">validates_format_of<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
:image_URL,</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
<SPAN STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple">:with
=&gt; %r{\.(gif|jpg|png)$}i,</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
<SPAN STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple">:message
=&gt; “must be a URL for a GIF, JPG or PNG
image!”</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">Product.rb</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的完整代码如下</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">class Product &lt; ActiveRecord::Base</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
validates_presence_of :title, :description, :image_URL</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
validates_numericality_of<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN> :price</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
validates_uniqueness_of :title</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
validates_format_of<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
:image_URL,</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="COLOR: white" XML:LANG="EN-US"><SPAN STYLE="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="BACKGROUND: purple; mso-highlight: purple">:with<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN> =&gt;<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN> %r{
\.(gif|jpg|png)$}i,</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="COLOR: white" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN STYLE="BACKGROUND: purple; mso-highlight: purple"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>:message
=&gt;"must be a URL for a GIF, JPG or PNG image!"</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">protected</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">def validate</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="COLOR: white" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN> <SPAN STYLE="BACKGROUND: purple; mso-highlight: purple">errors.add(:price,
"should be at least 0.01") if price.nil? ||
price&lt;0.01</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">end</SPAN></P>
<DIV STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
<P CLASS="MsoNormal" STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm">
<SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">end</SPAN></P>
</DIV>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
更美观的列表页</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
Prettier listings</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">---</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
还记得在</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">controller</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">admin</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">里使用了一句代码</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">scaffold:product</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
我们使用了动态的脚手架，它会在每次接受到请求时进行配置，如果想看到脚手架所使用的视图代码，就需要让</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">将它生成出来</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">---</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">使用静态的脚手架！脚手架生成器接收两个参数：模型名称，以及控制器名称。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">CMD</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">下输入</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">E:\rails\work\depot&gt;ruby script/generate scaffold
product admin</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
执行过程：</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">exists<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/controllers/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/helpers/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/admin</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/layouts/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
test/functional/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
dependency<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
model</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
app/models/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
test/unit/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
test/fixtures/</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
skip<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
app/models/product.rb</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
identical<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
test/unit/product_test.rb</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
identical<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>
test/fixtures/products.yml</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/admin/_form.rhtml</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/admin/list.rhtml</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/admin/show.rhtml</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/admin/new.rhtml</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/admin/edit.rhtml</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">overwrite
app/controllers/admin_controller.rb? [Ynaqd] y</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
force<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/controllers/admin_controller.rb</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">overwrite
test/functional/admin_controller_test.rb? [Ynaqd] y</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
force<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
test/functional/admin_controller_test.rb</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
identical<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/helpers/admin_helper.rb</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
app/views/layouts/admin.rhtml</SPAN></P>
<DIV STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
<P CLASS="MsoNormal" STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm">
<SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
public/stylesheets/scaffold.css</SPAN></P>
</DIV>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
首先检查已经有的模型类存在，然后创建“显示货品维护页面”所需的所有视图文件。但到了控制器这里，脚手架生成器就停下来，因为它发现我们已经编辑过</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">admin_controller</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">这个文件，所以会询问是否要将其改写成新的版本。我们唯一修改过的地方就是加上了</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">scaffold:product</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">这行代码，现在不再需要了，所以</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">y!</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">在改写控制器功能测试之前也会征询我们的意见，我们也同意了。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
刷新浏览器，没有变化的，静态脚手架添加的代码和动态脚手架凭空生成的代码是一摸一样的，但现在我们已经拿到代码了，可以编辑它。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">App/views/admin/list.rhtml</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">文件中</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">视图生成了当前的货品列表页面。</SPAN></P>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cos.html#comment</comments>
            <pubDate>Fri, 02 Nov 2007 06:40:42 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cos.html</guid>
        </item>
        <item>
            <title>rails lesson3</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cor.html</link>
            <description><![CDATA[<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">------------------------------------------------</SPAN></P>
<DIV STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
<P CLASS="MsoNormal" STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
添加缺失的字段：</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">Add a
Missing column</SPAN></P>
</DIV>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
【货品没有定价！】</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
我们使用数据迁移，用迁移任务来添加字段，就可以对数据库结构进行版本控制，并且可以轻松重建数据库。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
在前面创建</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">Product</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">模型类时，我们已经使用过自动生成的迁移任务；这次自己创建一个，并且起一个一目了然的名字，这样哪怕在一年后再来看这个应用程序，也能记得每个迁移任务是干什么的。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
一般的习惯是用</SPAN> <SPAN LANG="EN-US" XML:LANG="EN-US">”create”</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
来给</SPAN> <SPAN LANG="EN-US" XML:LANG="EN-US">”</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">创建表</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">”</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
的迁移任务命名，用</SPAN> <SPAN LANG="EN-US" XML:LANG="EN-US">”add”</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
来给</SPAN> <SPAN LANG="EN-US" XML:LANG="EN-US">”</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">往现有表中添加字段</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">”</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
的迁移任务命名。</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">E:\rails\work\depot&gt;ruby script/generate migration
add_price

</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">----</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
运行结果</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
exists<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
db/migrate</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
create<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
db/migrate/002_add_price.rb</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">----</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
看到这里创建了</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">002_add_price.rb</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的数据迁移，</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">用这个序列号来跟踪哪些迁移任务已经被实施过了，还有哪些没有实施！</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
打开</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">002_add_price.rb</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">编辑内容如下：</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">class
AddPrice &lt; ActiveRecord::Migration</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
def self.up</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
<SPAN STYLE="COLOR: white"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN><SPAN STYLE="BACKGROUND: purple; mso-highlight: purple">add_column :products,
:price, :decimal, :precision =&gt;8, :scale=&gt;2,
:default=&gt;0</SPAN></SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
def self.down</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
<SPAN STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple"><SPAN STYLE="mso-spacerun: yes">
&nbsp;</SPAN>remove_column :products,
:price</SPAN></SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
这里</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">:precision</SPAN>
<SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
参数告诉数据库：</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">price</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">字段应该保存</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">8</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">位有效数字；</SPAN>
<SPAN LANG="EN-US" XML:LANG="EN-US">:scale</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">参数则表示这个字段只保存两位小数。也就是说，我们可以保存的价格是从</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">-999</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">，</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">999.99</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">到</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">+999</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">，</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">999.99</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">----</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">不要太操心这里的语法，以后会详细介绍！</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
现在，再次运行数据迁移：</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">E:\rails\work\depot&gt;rake db:migrate</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
运行：</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>(in
E:/rails/work/depot)</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">==
AddPrice: migrating
========================================================</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">--
add_column(:products, :price, :decimal, {:scale=&gt;2,
:default=&gt;0, :precision=&gt;</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">8})</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>
-&gt; 0.0780s</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">==
AddPrice: migrated (0.1250s)
===============================================</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
这时候再次启动我们的</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">depot</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">应用</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US">E:\rails\work\depot&gt;ruby script/server</SPAN></P>
<DIV STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
<P CLASS="MsoNormal" STYLE="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
浏览器中刷新一下就看到，又有了价格了！</SPAN></P>
</DIV>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
用模型层给代码世界与数据库之间做把门人吧！</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">Validate!</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">---</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
问题描述：</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
在试用过程中，会发现不管输入什么或者不输入东西，应用程序都会接受这些信息存入数据库。所以有必要在应用程序中加入验证信息。</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
这种验证逻辑放在。。。模型层！</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
位于</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">app/models/product.rb</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">文件</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
来，添加点验证信息吧！</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">class
Product &lt; ActiveRecord::Base</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" STYLE="BACKGROUND: purple; COLOR: white; mso-highlight: purple" XML:LANG="EN-US"><SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN>
validates_presence_of :title, :description, :image_URL</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">end</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">#validates_presence_of()</SPAN> <SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
方法是一个标准的</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US">Rails</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">验证器，他会检查指定的一个字段存在并且值不为空</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
看看浏览器上怎么反映的吧！（加入输入都是空值的话）</SPAN></P>
<P CLASS="MsoNormal"><SPAN STYLE="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
<SPAN LANG="EN-US" STYLE="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" XML:LANG="EN-US">

&nbsp;</SPAN></SPAN></P>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cor.html#comment</comments>
            <pubDate>Fri, 02 Nov 2007 06:36:40 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cor.html</guid>
        </item>
        <item>
            <title>rails lesson2</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cod.html</link>
            <description><![CDATA[<DIV>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US">&nbsp; 

</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<B STYLE="mso-bidi-font-weight: normal"><SPAN STYLE="FONT-SIZE: 12pt; FONT-FAMILY: 黑体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-hansi-font-family: 宋体">
配置<SPAN LANG="EN-US" XML:LANG="EN-US">mysql</SPAN>并且开始我们的<SPAN LANG="EN-US" XML:LANG="EN-US">depot</SPAN>之旅</SPAN></B><SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US"><br/>
<SPAN STYLE="COLOR: red">1.</SPAN></SPAN><SPAN STYLE="COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">安装<SPAN LANG="EN-US" XML:LANG="EN-US">mysql-

5.0.22-win32</SPAN></SPAN><SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US"><br/></SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">下载地址：<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
<SPAN STYLE="COLOR: blue">http://download.mysql.cn/download_file/zip/5.0/mysql-5.0.22-win32.zip</SPAN></SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
修改一下安装路径<SPAN LANG="EN-US" XML:LANG="EN-US">C:\MySQL</SPAN>，剩下的安装默认安装即可</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
配置环境变量，添加<SPAN LANG="EN-US" XML:LANG="EN-US">C:\MySQL\bin;</SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US">-------------<br/></SPAN><SPAN STYLE="COLOR: #cc99ff; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">创建<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>应用<SPAN LANG="EN-US" XML:LANG="EN-US">depot</SPAN></SPAN><SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US"><br/>
<SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">E:\rails\work&gt;rails
depot</SPAN><br/></SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">创建中<SPAN LANG="EN-US" XML:LANG="EN-US">...<br/>
---<br/></SPAN><SPAN STYLE="COLOR: #cc99ff">创建数据库，数据库名称：<SPAN LANG="EN-US" XML:LANG="EN-US">depot_development</SPAN></SPAN><SPAN LANG="EN-US" XML:LANG="EN-US"><br/></SPAN>输入命令：<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
<SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">E:\rails\work\depot&gt;mysqladmin
-u root create
depot_development</SPAN><br/></SPAN>这里利用<SPAN LANG="EN-US" XML:LANG="EN-US">mysqladmin</SPAN>这个命令行客户端工具来创建数据库。</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
成功会重新回到<SPAN LANG="EN-US" XML:LANG="EN-US">E:\rails\work\depot&gt;<br/></SPAN>紧接着输入<SPAN LANG="EN-US" STYLE="COLOR: #666699" XML:LANG="EN-US">&nbsp;</SPAN> <SPAN LANG="EN-US" STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black" XML:LANG="EN-US">E:\rails\work\depot&gt;rake db:migrate</SPAN><SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
rake db:migrate</SPAN> 的作用是迁移数据，到数据库中</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
如果运行成功的话，会出现<SPAN LANG="EN-US" XML:LANG="EN-US">(in
E:/rails/work/depot)<br/>
---------------------------------------------------------<br/>
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN></SPAN>
不用害怕会对<SPAN LANG="EN-US" XML:LANG="EN-US">mysql</SPAN>的操作是<SPAN LANG="EN-US" XML:LANG="EN-US">CMD</SPAN>中输入好多原始的指令。因为<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>中有一个数据库迁移任务的功能！！</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US">&nbsp;<br/>
&nbsp;&nbsp;&nbsp;</SPAN>
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
这里应用到了<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>中的数据库迁移任务<SPAN LANG="EN-US" XML:LANG="EN-US">(database
migration).</SPAN>每个迁移任务代表针对数据库进行的一次修改，采用独立于数据库的源程序形式来描述。修改的内容可能是针对数据库结构的，也可能是针对表中的数据的。你可以用这些迁移任务来升级数据库，也可以撤销它们的作用。<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;simply speaking
,</SPAN>这个数据库迁移任务就是避免了对<SPAN LANG="EN-US" XML:LANG="EN-US">mysql</SPAN>的操作还使用<SPAN LANG="EN-US" XML:LANG="EN-US">create table</SPAN>之类的繁杂的语句来操作！<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;------<br/></SPAN>下面展示一下，在<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>中数据库迁移任务的工作过程，或者说是原理？或者是操作步骤？</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US">-----<br/>
next step: <SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">E:\rails\work\depot&gt;ruby
script/generate model product</SPAN><SPAN STYLE="COLOR: #666699"><br/></SPAN></SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">出现：<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;exists&nbsp; app/models/<br/>
&nbsp;exists&nbsp; test/unit/<br/>
&nbsp;exists&nbsp; test/fixtures/<br/>
&nbsp;create&nbsp;
app/models/product.rb<br/>
&nbsp;create&nbsp;
test/unit/product_test.rb<br/>
&nbsp;create&nbsp;
test/fixtures/products.yml<br/>
&nbsp;create&nbsp; db/migrate<br/>
&nbsp;create&nbsp;
db/migrate/001_create_products.rb<br/>
&nbsp;<br/>
&nbsp;</SPAN>这里着重注意两个文件：<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;</SPAN>迁移任务 <SPAN LANG="EN-US" XML:LANG="EN-US">:
001_create_products.rb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
和<SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
模型类 ：<SPAN LANG="EN-US" XML:LANG="EN-US">product.rb<br/>
&nbsp;<br/>
&nbsp;<br/>
&nbsp;</SPAN>
说明一下：迁移任务的名字由几部分组成：描述自己的功能<SPAN LANG="EN-US" XML:LANG="EN-US">(create_products),</SPAN>加上序列号作为前缀<SPAN LANG="EN-US" XML:LANG="EN-US">(001),</SPAN>再加上扩展名<SPAN LANG="EN-US" XML:LANG="EN-US">(.rb)</SPAN>。<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;<br/>
&nbsp;<br/>
&nbsp;</SPAN>
下面，要做的是在这个文件中添加代码来创建数据库表！<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;</SPAN> 打开<SPAN LANG="EN-US" XML:LANG="EN-US">db/migrate</SPAN>目录下的<SPAN LANG="EN-US" XML:LANG="EN-US">001_create_products.db<br/>
&nbsp;</SPAN> 可以看到里面的代码是这样<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp; class CreateProducts &lt;
ActiveRecord::Migration<br/>
&nbsp;def self.up<br/>
&nbsp;create_table :products do |t|<br/>
&nbsp;# t.column :name, :string<br/>
&nbsp;end<br/>
&nbsp;<br/>
&nbsp;def self.down<br/>
&nbsp;drop_table :products<br/>
&nbsp;end<br/>
end</SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
说明：<SPAN LANG="EN-US" XML:LANG="EN-US">up()</SPAN>方法用于实施迁移，定义数据库表的代码要写在这里，<SPAN LANG="EN-US" XML:LANG="EN-US">down()</SPAN>方法负责撤销<SPAN LANG="EN-US" XML:LANG="EN-US">up()</SPAN>方法的效果，当需要把数据库恢复到前一个版本时就会执行这个方法。可以看到，<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>已经添加了一些代码，分别在这两个方法中创建和删除数据库表。我们的任务就是要说明需要哪些字段。</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
编辑这个文件如下：<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp; <SPAN STYLE="COLOR: #666699">class
CreateProducts &lt; ActiveRecord::Migration<br/>
&nbsp;def self.up<br/>
&nbsp;create_table :products do |t|<br/>
&nbsp;# t.column :name, :string<br/>
&nbsp;<br/></SPAN><SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">&nbsp;
<SPAN STYLE="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>t.column
:title,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:string<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t.column
:description,&nbsp;&nbsp;&nbsp;&nbsp;
:text<SPAN STYLE="mso-spacerun: yes">&nbsp;</SPAN><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t.column
:image_url,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:string<br/></SPAN><SPAN STYLE="COLOR: #666699">&nbsp;<br/>
&nbsp;def self.down<br/>
&nbsp;drop_table :products<br/>
&nbsp;end<br/>
end</SPAN></SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US"><br/></SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">现在，要让<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>把这个迁移任务实施到开发数据库上，这里需要用到<SPAN LANG="EN-US" XML:LANG="EN-US">rake</SPAN>命令，在任何时候，<SPAN LANG="EN-US" XML:LANG="EN-US">rake</SPAN>
都是你手边可靠的助手，你告诉它做什么事情，然后事情就做好了。在这里，我们要告诉<SPAN LANG="EN-US" XML:LANG="EN-US">rake:</SPAN>把所有尚未实施的迁移任务都实施到数据库上。</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="BACKGROUND: black; COLOR: #ffff99; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-highlight: black" XML:LANG="EN-US">E:\rails\work\depot&gt;rake db:migrate</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
成功标志：<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
(in E:/rails/work/depot)<br/>
== CreateProducts: migrating
==================================================<br/>
-- create_table(:products)<br/>
&nbsp;&nbsp; -&gt; 0.0310s<br/>
== CreateProducts: migrated (0.0630s)
=========================================</SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
这就搞定了，<SPAN LANG="EN-US" XML:LANG="EN-US">rake</SPAN>会找出所有没有实施的迁移任务，并逐一实施它们，也就是说，<SPAN LANG="EN-US" XML:LANG="EN-US">products</SPAN>表会被添加到<SPAN LANG="EN-US" XML:LANG="EN-US">database.yml</SPAN>文件的<SPAN LANG="EN-US" XML:LANG="EN-US">development</SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US">rake</SPAN><SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">怎么知道哪些迁移任务实施过，哪些没有呢？运行迁移任务之后去看看数据库结构，你就会发现<SPAN LANG="EN-US" XML:LANG="EN-US">schema_info</SPAN>这么一张表，它的作用就是跟踪数据库的版本。<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
-------------------------------------<br/></SPAN>创建控制器<SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp; create your controller<br/>
-------------------------------------<br/>
&nbsp;MVC</SPAN>框架中了解了，应用程序需要一个<SPAN LANG="EN-US" XML:LANG="EN-US">controller</SPAN>来协调<SPAN LANG="EN-US" XML:LANG="EN-US">"</SPAN>管理货品列表<SPAN LANG="EN-US" XML:LANG="EN-US">"</SPAN>时需要的工作，我们把这个<SPAN LANG="EN-US" XML:LANG="EN-US">controller</SPAN>叫做<SPAN LANG="EN-US" XML:LANG="EN-US">admin,</SPAN>有一个<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>代码生成器可以生成它！那就是<SPAN LANG="EN-US" XML:LANG="EN-US">generate!<br/>
&nbsp;<br/>
&nbsp;so:<br/>
<SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">&nbsp;E:\rails\work\depot&gt;ruby
script/generate controller admin</SPAN><br/>
&nbsp;--------------------------------------<br/>
&nbsp;</SPAN>创建“货品维护”应用<SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;&nbsp; create the
mantenance Application<br/>
&nbsp;<br/>
&nbsp;ok,</SPAN>我们已经做过的工作：我们把<SPAN LANG="EN-US" XML:LANG="EN-US">depot</SPAN>应用设置为一个<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>应用，创建开发数据库，并让应用程序能够连接到数据库；我们还创建了<SPAN LANG="EN-US" XML:LANG="EN-US">admin</SPAN>控制器和<SPAN LANG="EN-US" XML:LANG="EN-US">product</SPAN> 模型类，并用迁移任务创建了对应的<SPAN LANG="EN-US" XML:LANG="EN-US">products</SPAN>表。现在，该动手编写货品维护的应用了<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;<br/>
&nbsp;</SPAN>现在打开<SPAN LANG="EN-US" XML:LANG="EN-US">app/controllers</SPAN>目录下的<SPAN LANG="EN-US" XML:LANG="EN-US">admin_controller.rb</SPAN>文件，这个文件是这样<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
&nbsp;<br/>
&nbsp;class AdminController &lt;
ApplicationController</SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN LANG="EN-US" STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" XML:LANG="EN-US">end</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
加上一行代码<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
---------------------------------------<br/>
<SPAN STYLE="COLOR: #666699">class AdminController &lt;
ApplicationController<br/></SPAN><SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">&nbsp;
scaffold :product</SPAN><SPAN STYLE="COLOR: #666699"><br/>
end</SPAN><br/>
------------------------------------<br/></SPAN>这一行代码就构成了基本的货品维护应用，<SPAN LANG="EN-US" XML:LANG="EN-US">scaffold</SPAN>声明告诉<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>：请在运行时生成应用程序代码；
<SPAN LANG="EN-US" XML:LANG="EN-US">:product</SPAN>模型来维护数据。</SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
现在可以来看看这个简单的应用是什么样子了！<SPAN LANG="EN-US" XML:LANG="EN-US">:)</SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
启动<SPAN LANG="EN-US" XML:LANG="EN-US">rails</SPAN>应用，还记得是怎么运行的么？<SPAN LANG="EN-US" XML:LANG="EN-US"><br/>
----------------------------------------<br/>
<SPAN STYLE="BACKGROUND: black; COLOR: #ffff99; mso-highlight: black">E:\rails\work\depot&gt;ruby
script/server</SPAN></SPAN></SPAN></P>
<P CLASS="MsoNormal" STYLE="TEXT-ALIGN: left; mso-pagination: widow-orphan" ALIGN="left">
<SPAN STYLE="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
！</SPAN></P>
<P CLASS="MsoNormal"><SPAN LANG="EN-US" XML:LANG="EN-US">&nbsp;</SPAN></P>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cod.html#comment</comments>
            <pubDate>Thu, 01 Nov 2007 08:32:41 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cod.html</guid>
        </item>
        <item>
            <title>rails_lesson1</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cob.html</link>
            <description><![CDATA[<DIV>&nbsp;
<P><FONT FACE="宋体">创建mvc框架命令：<br/>
例如在下面的路径下创建一个demo目录的rails框架<br/>
e:\rails\work&gt;rails demo<br/>
创建中...<br/>
&nbsp;<br/>
运行之后demo目录下就会产生一个mvc框架</FONT></P>
<P><FONT FACE="宋体">其中script目录下有好多的脚本可以执行</FONT></P>
<P><FONT FACE="宋体">我们启动/script/server就可以启动一个rails应用了！<br/>
运行命令e:\rails\work\demo\script&gt;ruby server<br/>
之后系统就开始启动这个应用了，并且说明了端口3000<br/>
下面是显示的内容：<br/>
=&gt; Booting WEBrick...<br/>
=&gt; Rails application started on http://0.0.0.0:3000<br/>
=&gt; Ctrl-C to shutdown server; call with --help for options<br/>
[2007-11-01 11:23:18] INFO&nbsp; WEBrick 1.3.1<br/>
[2007-11-01 11:23:18] INFO&nbsp; ruby 1.8.6
(2007-03-13) [i386-mswin32]<br/>
[2007-11-01 11:23:18] INFO&nbsp;
WEBrick::HTTPServer#start: pid=2308 port=3000<br/>
此时，我们可以通过explorer检测，输入url:http://127.0.0.1:3000<br/>
已经出现了rails的页面！</FONT></P>
<P><FONT FACE="宋体">来，写一个简单的rails应用吧！</FONT></P>
<P><FONT FACE="宋体">打开demo/app目录，你可以看到controllers
和views！这两个文件夹对应的就是mvc
框架的控制器和视图模板！</FONT></P>
<P><FONT FACE="宋体">在controllers下建一个名叫Say控制器吧<br/>
最难受的就是要在CMD下进行,因为要借助一下script下的generate的脚本来创建这个控制器！</FONT></P>
<P><FONT FACE="宋体">输入命令：e:\rails\work\demo&gt;ruby
script/generate controller Say<br/>
这个命令会检查文件和目录，以及它所添加的ruby源代码和目录。<br/>
&nbsp;exists&nbsp; app/controllers/<br/>
&nbsp;exists&nbsp; app/helpers/<br/>
&nbsp;create&nbsp; app/views/say<br/>
&nbsp;exists&nbsp; test/functional/<br/>
&nbsp;create&nbsp;
app/controllers/say_controller.rb<br/>
&nbsp;create&nbsp;
test/functional/say_controller_test.rb<br/>
&nbsp;create&nbsp;
app/helpers/say_helper.rb<br/>
&nbsp;<br/>
&nbsp;##这里必须要记住的是这三个CMD命令<br/>
&nbsp;1.e:\rails\work&gt;rails
demo&nbsp;&nbsp;&nbsp;&nbsp;
#这是要create一个rails应用<br/>
&nbsp;2.e:\rails\work\demo\ruby
script/server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
#启动这个rails应用<br/>
&nbsp;3.e:\rails\work\demo&gt;ruby script/generate
controller
Say&nbsp;&nbsp;&nbsp;
#新建一个控制器,这个控制器的脚本&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
是用ruby写的，*.rb<br/>
&nbsp;<br/>
&nbsp;下面就可以看到在controller目录下有一个say_controller.rb
了<br/>
&nbsp;在这个say_controller.rb中可以添加action,譬如我们现在可以添加一个
action名字叫hello!<br/>
&nbsp;class SayController &lt;
ApplicationController<br/>
&nbsp;def hello<br/>
&nbsp;end<br/>
&nbsp;end<br/>
&nbsp;<br/>
&nbsp;<br/>
添加hello这个action的显示内容view文件夹中E:\rails\work\demo\app\views\say中新建一个hello.rhtml文件，使用IDE进行编辑（我用aptana）<br/>

&lt;html&gt;<br/>
&lt;head&gt;<br/>
&lt;title&gt;<br/>
&nbsp;welcome to the rails world!<br/>
&lt;/title&gt;<br/>
&lt;body&gt;<br/>
&nbsp;&lt;b&gt;hello world!&lt;/b&gt;<br/>
&lt;/body&gt;<br/>
&lt;/head&gt;<br/>
&lt;/html&gt;<br/>
再用URL:http://127.0.0.1:3000/say/hello访问这个页面就会看到hello
world!了！</FONT></P>
<P><FONT FACE="宋体">让它动起来！<br/>
例如让rails显示一下时间吧？:)<br/>
可以在controller(say)里定义一个实例变量，这个实例变量用来得到当前的时间。<br/>

然后view里得到这个实例变量的值就可以了！</FONT></P>
<P><FONT FACE="宋体">方法：<br/>
1.修改say_controller.rb为：<br/>
class SayController &lt; ApplicationController<br/>
&nbsp; def hello<br/>
&nbsp;&nbsp;&nbsp;
@time=Time.now<br/>
&nbsp; end<br/>
&nbsp;<br/>
end</FONT></P>
<P><FONT FACE="宋体">定义这个@time的实例变量<br/>
再在view中修改显示内容<br/>
加入&lt;p&gt;<br/>
&nbsp;&nbsp;It is now &lt;%=
@time%&gt;<br/>
&nbsp;&lt;/p&gt;<br/>
当然不修改say_controller.rb的内容也可以，在view中修改代码为<br/>
&nbsp;&lt;p&gt;<br/>
&nbsp;&nbsp;It is now &lt;%=
Time.now%&gt;<br/>
&nbsp;&lt;/p&gt;<br/>
也可以实现同样的效果<br/>
但是，如果在控制器中提供要显示的时间信息，我们的应用程序就会更加灵活：我们可以在控制器中修改显示格式和时区设置，而不必对视图做任何修改。时间信息是一份数据，它应该由控制器提供给视图。</FONT></P>
<P><FONT FACE="宋体">把页面链接起来<br/>
这里再create一个goodbye的action,也就是一个http://127.0.0.1:3000/say/goodbye的页面<br/>

内容大致如下<br/>
&lt;html&gt;<br/>
&lt;head&gt;<br/>
&lt;title&gt;<br/>
&nbsp;see you then!<br/>
&lt;/title&gt;<br/>
&lt;body&gt;<br/>
&nbsp;&lt;b&gt;see you then!&lt;/b&gt;<br/>
&lt;/body&gt;<br/>
&lt;/head&gt;<br/>
&lt;/html&gt;</FONT></P>
<P><FONT FACE="宋体">意思就是说要把hello和goodbye页面链接起来<br/>
可以再hello.rhtml中加入如下代码：<br/>
&lt;p&gt;Time to say<br/>
&lt;%=link_to "Goodbye!", :action =&gt;"goodbye"
%&gt;&lt;/p&gt;</FONT></P>
</DIV>
]]></description>
            <author>李骥平</author>
            <category>Rails</category>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cob.html#comment</comments>
            <pubDate>Thu, 01 Nov 2007 05:15:24 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cob.html</guid>
        </item>
        <item>
            <title>you may be a victim of software counterfeiting</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cnt.html</link>
            <description><![CDATA[<DIV>&nbsp;
<DIV CLASS="tit">遇到“you may be a victim of software
counterfeiting”这样的提示，说明你的系统被微软盯上了</DIV>
<DIV CLASS="date">2007年10月21日 星期日 17:38</DIV>
<TABLE STYLE="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV CLASS="cnt">
<P>解决方法：</P>
<P>在安全模式下（要不系统提示你删除不了wgatray.exe ）</P>
<P>开始→运行&nbsp;&nbsp;&nbsp;
输入regedit&nbsp;&nbsp;&nbsp;&nbsp;
进入注册表&nbsp;&nbsp;&nbsp;
找到&nbsp;&nbsp;&nbsp;&nbsp;
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon\Notify ，
删除该项下的&nbsp;&nbsp;&nbsp;
Wgalogon 键</P>
<P>
退出注册表&nbsp;&nbsp;&nbsp;&nbsp;
进入C:\WINDOWS\system32&nbsp;&nbsp;&nbsp;&nbsp;
找到
wgatray.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
删除它，然后重起。我这样做的，成功了。记得把自动更新关闭，那个没用的。</P>
<P>可以在安全模式下删除此文件！</P>
</DIV>
</TD>
</TR>
</TBODY>
</TABLE>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cnt.html#comment</comments>
            <pubDate>Wed, 31 Oct 2007 11:07:05 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cnt.html</guid>
        </item>
        <item>
            <title>The Most Important Day In My life</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000clz.html</link>
            <description><![CDATA[<DIV ALIGN="center"><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Impact"><FONT STYLE="FONT-SIZE: 20px">&nbsp;<STRONG>The Most Important Day
In My life</STRONG></FONT></FONT></DIV>
<DIV ALIGN="center"><FONT FACE="Impact">Helen Keller</FONT></DIV>
<DIV>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial"><FONT COLOR="#CC3333">The most important day I remember in all my life is the
one on which</FONT> my teacher, Anne Mansfield Sullivan, came to
me. <FONT COLOR="#CC3333">I am filled with wonder when</FONT>
<FONT COLOR="#990000">I consider the immeasurable contrast between
the two lives which it connects.</FONT> It was the third of March,
1887, three months before I was seven years old.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">On the
afternoon of the eventful day, I stood on the porch, dumb,
expectant. I guessed vaguely from my mother’s signs and from the
hurrying to and fro in the house that something unusual was about
to happen, so I went to the door and waited on the steps. The
afternoon sun penetrated the mass of honeysuckle that covered the
porch, and fell on my upturned face. My fingers lingered almost
unconsciously on the familiar leaves and blossoms which had just
come forth to greet the sweet southern spring. I did not know what
the future held of marvel or surprise for me. Anger and bitterness
had preyed upon the continually for weeks and a deep languor had
succeeded this passionate struggle.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">Have you ever
been at sea in a dense fog, when it seemed as if a tangible white
darkness shut you in, and the great ship, tense and anxious, groped
her way toward the shore with plummet and sounding-line, and had no
way of knowing how near the harbour was? “ Light ! Give me light!
” was the wordless cry of my soul, and the light of love shone on
me in that very hour.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">I felt
approaching footsteps. I stretched out my hand as I supposed to my
mother. Someone took it, and I was caught up and held close in the
arms of her who had come to reveal all things to me, and, more than
all things else, to love me.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">The morning
after my teacher came she led me into her room and gave me a doll.
The little blind children at the Perkins Institution had sent it
and Laura Bridgeman had dressed it; but I did not know this until
afterward. When I had played with it a little while, Miss Sullivan
slowly spelled into my hand the word “d-o-l-l”. I was at once
interested in this finger play and tried to imitate it.. When I
finally succeeded in making the letters correctly I was flushed
with childish pleasure and pride. Running downstairs to my mother I
held up my hand and made the letters for doll. I did not know that
I was spelling a word or even that words existed; I was simply
making my fingers go in monkey-like imitation. In the days that
followed I learned to spell in this uncomprehending way a great
many words, among them pin, hat, cup and a few verbs like sit,
stand and walk. But my teacher had been with me several weeks
before I understood that everything has a name.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">One day, while
I was playing with my new doll, Miss Sullivan put my big rag doll
into my lap also, spelled “d-o-l-l” and tried to make me
understand that “d-o-l-l” applied to both. Earlier in the day we
had had a tussle over the words “m-u-g” and “w-a-t-e-r”. Miss
Sullivan had tried to impress it upon me that “m-u-g” is mug and
“w-a-t-e-r” is water, but I persisted in confounding the two. In
despair she had dropped the subject for the time, only to renew it
at the first opportunity. I became impatient at her repeated
attempts and, seizing the new doll, I dashed it upon the floor. I
was keenly delighted when I felt the fragments of the broken doll
at my feet. Neither sorrow nor regret followed my passionate
outburst. I had not loved the doll. In the still, dark world in
which I lived there was no strong sentiment or tenderness. I felt
my teacher sweep the fragments to one side of the hearth, and I had
a sense of satisfaction that the cause of my discomfort was
removed. She brought me my hat, and I knew I was going out into the
warm sunshine. This thought, if wordless sensation may be called a
thought, made me hop and skip with pleasure.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">We walked down
the path to the well-house, attracted by the fragrance of the
honeysuckle with which it was covered. Someone was drawing water
and my teacher placed my hand under the spout. As the cool stream
gushed over one hand she spelled into the other the word water,
first slowly , then rapidly. I stood still, my whole attention
fixed upon the motions of her fingers. Suddenly I felt a misty
consciousness as of something forgotten – a thrill of returning
thought; and somehow the mystery of language was revealed to me. I
knew then that “w-a-t-e-r” meant the wonderful cold something
that was flowing over my hand. That living word awakened my soul,
gave it light, hope, joy, set it free! There were barriers still,
it is true, but barriers that could in time be swept
away.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">I left the
well-house eager to learn. Everything had a name, and each name
gave birth to a new thought. As we returned to the house every
object which I touched seemed to quiver with life. That was because
I saw everything with the strange, new sight that had come to me.
On entering the door I remembered the doll I had broken. I felt my
way to the hearth and picked up the pieces. I tried vainly to put
them together. Then my eyes filled with tears; for I realized what
I had done, and for the first time I felt repentance and
sorrow.</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">&nbsp;</FONT></P>
<P><FONT STYLE="FONT-SIZE: 14px; FONT-FAMILY: Arial">I learned a
great many new words that day. I do not remember what they all
were; but I know that mother, father, sister, teacher were among
them—words that were to make the world blossom for me, “like
Aaron’s rod, with flowers. ” It would have been difficult to find
a happier child than I was as I lay in my crib at the close of that
eventful day and lived over the joys it had brought me, and for the
first time longed for a new day to come.</FONT></P>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000clz.html#comment</comments>
            <pubDate>Fri, 26 Oct 2007 06:12:18 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000clz.html</guid>
        </item>
        <item>
            <title>desert love</title>
            <link>http://blog.sina.com.cn/s/blog_4b3336de01000cl5.html</link>
            <description><![CDATA[<DIV><FONT STYLE="FONT-SIZE: 16px; FONT-FAMILY: 楷体_GB2312">&nbsp;</FONT>
<DIV CLASS="mode_table_menu">&nbsp;</DIV>
<DIV ID="quoteinfo" STYLE="MARGIN-BOTTOM: 10px"></DIV>
<DIV ID="voteAnchor"></DIV>
<DIV STYLE="POSITION: relative">
<DIV CLASS="lh3" ID="veryContent" STYLE="OVERFLOW: hidden; WIDTH: 100%">
<TABLE CLASS="contentTable" CELLSPACING="0" CELLPADDING="0">
<TBODY>
<TR>
<TD STYLE="FONT-SIZE: 16px"><FONT STYLE="FONT-SIZE: small; LINE-HEIGHT: 1.3em"><WBR></WBR><FONT STYLE="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em"><WBR></WBR><FONT STYLE="FONT-SIZE: 16px; FONT-FAMILY: 楷体_GB2312">&nbsp;&nbsp;&nbsp;&nbsp;如果执着是一种重负或一种伤害,当爱情不能完美，我宁愿选择无悔，不论来生多么美丽，我无法失去今生对你的记忆！&nbsp;为什么路的后面还是路，为什么故事结束还有那么多的假如。只有你能打破黑夜的企图，什么时候我的梦境能有太阳居住。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;如果今生我们注定擦肩而过，那我深深地祝福你永远快乐。然后收起所有的点点情意，期待来生与你相遇。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;泪水是我想你的滋味，我寄出的心无力挽回，如果回忆是唯一的回信，我不会忘记曾经的美丽。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;分手已说出来，怎会仍深深的感觉无奈。泪已流下来，怎可让它堆积成海。和你分手的一刻，我愿做你眼里的一滴泪，当你把我哭出来的时候，让我在你的唇边消失。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;有些话只说一遍，我真心让你走。那双更温暖的手，你一定要好好的握。别担心我，你多保重，你一定要比我幸福。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;这一次我真的离开了你，比当初爱上你更需要勇气，这一次我真的离开了你，不敢告诉你我还是爱你，不想说再见，是因为我们要分别；不能说再见，是因为眼眶中有泪。缘聚缘散我们只能默然......也许生命中最美的就是这种没有结果的感情，一切都来不及表达，所有的，可能都因死亡或错过而冰封。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;鸟儿和鱼儿相爱了。可是，它们活在两个世界。于是，鸟儿伤心地飞向另一片海域，鱼儿游向海底最深处。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;也许是缘份，我们都不愿伤害最不愿伤害的人，但还是发生了，相信你，因为我爱你，让我们彼此好好珍惜。&nbsp;&nbsp;&nbsp;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;每一份感情都很美，每一程相伴也都令人迷醉。是不能拥有的遗憾让我们更感缝眷；是夜半无眠的思念让我们更觉留恋。感情是一份没有答案的问卷，苦苦的追寻并不能让生活更圆满。也许一点遗憾，一丝伤感，会让这份答卷更隽永，也更久远&nbsp;！<br/>

&nbsp;&nbsp;&nbsp;&nbsp;爱情的路上没有谁对不起谁,只有谁不懂得去珍惜。</FONT></FONT><WBR></WBR></FONT><WBR></WBR><FONT STYLE="FONT-SIZE: 16px; FONT-FAMILY: 楷体_GB2312">&nbsp;</FONT></TD>
</TR>
</TBODY>
</TABLE>
</DIV>
</DIV>
</DIV>
]]></description>
            <author>李骥平</author>
            <comments>http://blog.sina.com.cn/s/blog_4b3336de01000cl5.html#comment</comments>
            <pubDate>Thu, 25 Oct 2007 05:36:53 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_4b3336de01000cl5.html</guid>
        </item>
    </channel>
</rss>
