<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>xiejiaohui</title>
    <description></description>
    <link>http://xjh.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>高考落榜了怎么办？</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/223253" style="color:red;">http://xjh.javaeye.com/blog/223253</a>&nbsp;
          发表时间: 2008年08月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          高考落榜了，怎么办？<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－－－希望以此文献给今年高考落榜的高中生
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/223253#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Aug 2008 00:11:43 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/223253</link>
        <guid>http://xjh.javaeye.com/blog/223253</guid>
      </item>
          <item>
        <title>今天碰到一件郁闷的事情</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/222969" style="color:red;">http://xjh.javaeye.com/blog/222969</a>&nbsp;
          发表时间: 2008年08月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天是2008年8月1日,想想看,来江阴农商行做项目也快3个月了（5月4日来的），<br /><br />由于进入银行大楼要门卡，才可以上楼，以前经常叫保安开一下门，也熟悉了，<br /><br />有时候，看到有银行的人正好进去，我们几个就跟着进去了，<br /><br />感觉这样就不用麻烦银行的保安了，毕竟保安是一个非常好的人，<br /><br />还经常跟我们打招呼，还问我们什么时候项目做完之类的问题。<br />&nbsp; <br />&nbsp;&nbsp;&nbsp; 今天中午跟平常一样，看到一个银行的人来了，我们就没有叫保安了，想跟他一起进去，可以这银行的职员，<br /><br />他问我们说：“你们到几楼？”<br /><br />我说:“三楼”<br /><br />他（非常凶的）说：“那你叫三楼的人下来开门，不要老是跟着别人的后面！”<br /><br />我们没有说什么，马上就去叫保安过来开门了，保安说他还不让你们进去，笑了笑给我们开门了，就说这样的人都有。<br /><br />我们当时感觉今天怎么碰到这样的人了，是不是这个人喝醉酒了，这么凶！ <br /><br />但是明细没有喝醉的样子，在外面做点项目，我们没有必要跟这样的人计较，<br /><br />也许他也是做得非常对的，对银行负责嘛，免得不当人员混入银行。
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/222969#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Aug 2008 22:56:13 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/222969</link>
        <guid>http://xjh.javaeye.com/blog/222969</guid>
      </item>
          <item>
        <title>双节棍网站和论坛大集合 </title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/209983" style="color:red;">http://xjh.javaeye.com/blog/209983</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          双节棍网站和论坛大集合 <br />一)网站 <br />A <br />①李炎才师傅个人网站 www.liyancai.com <br />②双节棍中文网 http://www.nunchakus.net <br />③我要双节棍 http://www.51shjg.com/ <br />④狂人秀吧 http://www.madcn.com/sjg/ <br />⑤毅极会馆双节棍 http://www.yijihui.com/index_3.html <br />⑥张安邦武术世界 http://zhanganbang.anyp.cn/ <br />⑦成都双节棍联盟 http://www.brucejkd.com/class/006/index.asp <br />⑧精武双节棍网 http://nunchaku.sitesled.com/ <br />⑨王宏心武术世界 http://www.51shjg.com/whx.html <br />B <br />①光明左使个人网站 http://weicg.any2000.com/ <br /><br />来源：http://www.china1-1.com/link.htm
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/209983#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 01:57:00 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/209983</link>
        <guid>http://xjh.javaeye.com/blog/209983</guid>
      </item>
          <item>
        <title>在深圳找工作的同学警惕这个骗子25092883</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/206437" style="color:red;">http://xjh.javaeye.com/blog/206437</a>&nbsp;
          发表时间: 2008年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          来源: http://bbs.szhome.com/quote.aspx?id=52326659&amp;quote=52326659<br /><br />[香之舞](2008/6/3 11:52:16)<br />上午接到一电话,要下午过去面试的,说因为领导下午要来检查,务必准时到达.公司叫信义科技,说在罗湖那边.挂断了电话,心里还在纳闷时,就顺势查了一下网上的和电话里所说的信义科技不在同一个地方,后来又查了刚接的电话25092883,没想到,网下就出来这些:<br /><br /><br />发表于：2008-5-30 9:44:24　[] 资料短消息<br /> <br /><br />我上次接到个这样的面试通知,我问他们在什么地方,说是在群星广场15楼,叫下午4点过去面试,还说下午公司领导要来检查工作,让到了打他电话,说他姓陈,电话是25092883,我在网上查了我投的简历中没有地址在华强北群星的,下午去了科技园有点累就懒得去华强北面试了,4:30我打了好几个电话过去一直没人接. <br /><br /><br /><br />还有别的同学也接到这种电话,看来骗的人还真不少 <br /><br />[色綵的魅力](2008/5/29 10:40:56) <br />信仪科技昨天上午也打电话给我了，说要我下午4点去面试，还说下午公司有领导检查工作要我到楼下给她电话，我查了一下，我也没投过这家公司哦，她说在赛格科技园，可我网上搜到在罗湖，正好下午有事情耽误了没去，要不也上当了。不知道这些企业在发布招聘信息时，人才市场有没有核实企业真实资料呢？再这样下去，这个社会就...... <br /><br />深圳市信义科技有限公司 <br />深圳地址：罗湖区 延芳路64号 浩天大厦 三楼 <br />邮编：518003 <br />总机：0755-2513 5111（30线） <br />传真：0755-2513 5000 <br />电邮：info@xinyi.net.cn <br /><br />上面就是公司真正的地址 <br />但不知是不是别的坏人利用这家公司行骗的 <br /><br />发表于：2008-6-2 15:21:15　[] 资料短消息<br /> 第 8 楼 <br /><br />我也差点被骗了.上午接到２５０９２８８３这个号码打来的电话叫我下午３点去面试，是一个男的打来．因为当时在公车上有点吵具体什么公司就记不大清楚了，公司地址在西武大厦，还再三叮嘱我一定要准时，到了楼下先给他们电话让他们安排一下． <br />我回来看看自己投递的简单，没有在西武大厦的公司投过，后来把电话号码百度了一下，看到这贴子．还真谢天谢地．我还好没去． <br />刚刚三点整的时候，我打电话过去说我到了楼下，是个女的接．问了早上是她通知我还是她同事，还问我的名字，说公司领导在开会，让我在西武大厦旁边的建行门口等他们的人事经理，他和我谈一下工作的情况，问我穿什么衣服．我说我穿白色．挂了电话大概四五分钟左右，他们又打过来了．我没接．想想就后怕啊．．．． <br />大伙可都得注意了．
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/206437#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Jun 2008 18:45:07 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/206437</link>
        <guid>http://xjh.javaeye.com/blog/206437</guid>
      </item>
          <item>
        <title>IBM 55A 中 AIX 5.3 非正常关机，出现黄灯提示，怎么去掉黄灯</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/202962" style="color:red;">http://xjh.javaeye.com/blog/202962</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          IBM 55A 中 AIX 5.3 非正常关机，出现黄灯提示，怎么去掉黄灯？<br /><br />以 root 用户进入如下目录<br /><br />/usr/lpp/diagnostics/bin<br /><br />执行如下文件<br /><br />./usysfault -s normal<br /><br />黄灯就不亮了。
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/202962#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 14:39:26 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/202962</link>
        <guid>http://xjh.javaeye.com/blog/202962</guid>
      </item>
          <item>
        <title>jsp页面中不能显示图片</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/202952" style="color:red;">http://xjh.javaeye.com/blog/202952</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在 AIX 5.3 操作系统，WebSphere 5.1 应用服务器 中发布企业应用<br /><br />由于在登录的页面中要用到 校验码 （图片）来防止恶意用户用软件的登录，<br /><br />但是把应用发布以后，发现 jsp 页面中的 图片 无法显示，<br /><br />解决办法：<br /><br />登录 websphere 的管理端： http://127.0.0.1:9090/admin<br /><br />选择步骤如下：<br /><br />服务器 － 应用程序服务器 － server1 － 进程定义 － Java 虚拟机 － 高级 Java 虚拟机 设置 <br /><br />在&nbsp; 一般 JVM 自变量 中输入<br /><br />-Djava.awt.headless=true<br /><br />不要输错了，否则 websphere 会启动失败（启动不了）。<br /><br />然后重新启动 websphere 5.1.
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/202952#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 14:29:43 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/202952</link>
        <guid>http://xjh.javaeye.com/blog/202952</guid>
      </item>
          <item>
        <title>修改照片的文件大小</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/202942" style="color:red;">http://xjh.javaeye.com/blog/202942</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以下步骤修改照片，使得照片变小：<br /><br /><br />一&nbsp; 用鼠标右键点击你要修改的照片，选择编辑，windows XP 将用画图打开你要修改的照片。<br /><br /><br />二&nbsp; 选择图像 菜单 下的 拉伸/扭曲 菜单。<br /><br /><br />三&nbsp; 在弹出的 拉伸/扭曲 对话框中，把 拉伸 中的 水平 和 垂直 由原来的 100% 修改为 50% 下面的 扭曲 参数不变，然后选择 确定 按钮，照片的大小就变得小了很多了，并且 照片并没有变模糊，照片还变得更清楚了。<br /><br /><br />四&nbsp; 重复第三步，直到照片满足你的要求大小为此。<br /><br /><br />五&nbsp; 保存照片。
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/202942#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 14:13:28 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/202942</link>
        <guid>http://xjh.javaeye.com/blog/202942</guid>
      </item>
          <item>
        <title>aix 中修改用户密码</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/199205" style="color:red;">http://xjh.javaeye.com/blog/199205</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          password 命令用户建立或修改密码<br /><br />如：<br />#password<br />passwd:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 输入旧密码<br />new passwd:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 输入新密码<br />re-enter new passwd:&nbsp;&nbsp;&nbsp; - 重新输入新密码
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/199205#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 01 Jun 2008 20:16:56 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/199205</link>
        <guid>http://xjh.javaeye.com/blog/199205</guid>
      </item>
          <item>
        <title>婚纱照</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/190731" style="color:red;">http://xjh.javaeye.com/blog/190731</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          大易视觉<br /><br />http://www.dayiphoto.com/bbs/<br /><br /><br />非常有个性，挺好看的，推荐一下。<br /><br />最后的战役<br /><br />http://www.dayiphoto.com/bbs/viewthread.php?tid=292&amp;extra=page%3D1
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/190731#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 22:15:22 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/190731</link>
        <guid>http://xjh.javaeye.com/blog/190731</guid>
      </item>
          <item>
        <title>svn conf 目录中简单配置</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/190399" style="color:red;">http://xjh.javaeye.com/blog/190399</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          文件<br /><br />passwd<br /><br /><pre name="code" class="java">
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
admin=123456
xjh=654321
</pre><br /><br />文件<br /><br />authz<br /><br /><pre name="code" class="java">
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to a
### single user, to a group of users defined in a special [groups]
### section, or to anyone using the '*' wildcard.  Each definition can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

# [groups]
# harry_and_sally = harry,sally
[groups]
user = xjh,admin

[sdbcc:/]
* = rw

[sdbcc:/sdbcc_base]
* = rw

# [/foo/bar]
# harry = rw
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

</pre><br /><br />文件<br /><br />svnserve.conf<br /><br /><pre name="code" class="java">

### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/ for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults.
anon-access = none
auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control.  Unless you specify a path
### starting with a /, the file's location is relative to the conf
### directory.  If you don't specify an authz-db, no path-based access
### control is done.
### Uncomment the line below to use the default authorization file.
#authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
realm = sdbcc

</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/190399#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 May 2008 22:23:47 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/190399</link>
        <guid>http://xjh.javaeye.com/blog/190399</guid>
      </item>
          <item>
        <title>ue 12 注册码</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/190394" style="color:red;">http://xjh.javaeye.com/blog/190394</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          UltraEdit-32 12.00+3<br /><br />用户名：okget.com<br />注册码：E1A4H-R3T6V-G6M0Y-O5A3H<br /><br />来源：<br /><br />http://blog.chinaunix.net/u/14819/showart.php?id=146748
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/190394#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 May 2008 22:17:02 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/190394</link>
        <guid>http://xjh.javaeye.com/blog/190394</guid>
      </item>
          <item>
        <title>ruby on rails demo</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/179846" style="color:red;">http://xjh.javaeye.com/blog/179846</a>&nbsp;
          发表时间: 2008年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1 install ruby<br /><br />2 install rails&nbsp; input:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gem install -v=1.2.6 rails --include-dependencies<br /><br />3 ruby -v<br /><br />4 gem -version<br /><br />5 rails demo<br /><br />6 say_controller.rb<br /><pre name="code" class="ruby">
class SayController &lt; ApplicationController
	def hello
		@time = Time.now
	end
	def goodbye
	end
end
</pre><br /><br />7 demo\app\views\say\hello.rhtml<br /><br /><pre name="code" class="ruby">
&lt;html>
	&lt;head>
		&lt;title>Hello, Rails!&lt;/title>
	&lt;/head>
	&lt;body>
		&lt;h1>Hello from Rails!&lt;/h1>
		&lt;ul>
			&lt;li>Addition: &lt;%= 1 + 2 %>&lt;/li>
			&lt;li>Concatenation: &lt;%= "cow" + "boy" %>&lt;/li>
			&lt;li>Time is one hour: &lt;%= 1.hour.from_now %>&lt;/li>
		&lt;/ul>
		
		&lt;br />
		&lt;br />
		&lt;% 3.times do %>
			HO!&lt;br />
		&lt;% end %>
		Merry Christmas!
		
		&lt;br />
		&lt;br />
		&lt;% 3.downto(1) do |count| %>
		&lt;%= count %>...&lt;br />
		&lt;% end %>
		Lift off!
		
		&lt;br />
		&lt;br />
		Email: &lt;%= h("xiejiaohui &lt;xiejiaohui@hotmail.com>") %>
		
		&lt;br />
		&lt;br />
		&lt;p>
			It is now from page: &lt;%= Time.now %>
		&lt;/p>
		
		&lt;br />
		&lt;br />
		&lt;p>
			It is now from controller:  &lt;%= @time %>
		&lt;/p>
		
		&lt;p>
			Say &lt;a href="/say/goodbye">Goodbye&lt;/a>
		&lt;/p>
		&lt;p>
			Time to say
			&lt;%= link_to "GoodBye!", :action => "goodbye" %>
		&lt;/p>
		
	&lt;/body>
&lt;/html>
</pre><br /><br />8 demo\app\views\say\goodbye.rhtml<br /><pre name="code" class="ruby">
&lt;html>
	&lt;head>
		&lt;title>See You Later!&lt;/title>
	&lt;/head>
	&lt;body>
		&lt;h1>Goodbye!&lt;/h1>
		&lt;p>
			It was nice having you here.
		&lt;/p>
		&lt;p>
			Say &lt;a href="/say/hello">Hello&lt;/a>
		&lt;/p>
		&lt;p>
			Say &lt;%= link_to "Hello", :action => "hello" %> again.
		&lt;/p>
	&lt;body>
&lt;/html>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/179846#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 Apr 2008 15:27:59 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/179846</link>
        <guid>http://xjh.javaeye.com/blog/179846</guid>
      </item>
          <item>
        <title>安装Eclipse SVN plugin(Subclipse)</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/175046" style="color:red;">http://xjh.javaeye.com/blog/175046</a>&nbsp;
          发表时间: 2008年03月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          来源：http://www.svn8.com/svnpz/20080225/160.html<br /><br />这里介紹Eclipse的SVN Plugin，叫做Subclipse,官方网站的下载地址在http://subclipse.tigris.org/，也提供了update site http://subclipse.tigris.org/update。<br />Eclipse的使用者可以通过Eclipse的插件自动下载和更新功能来安装这个插件，在Eclipse的菜单中选择Help->Software Updates->Find and Install-> Search for new features to install ->New Remote Site。URL中就输入http://subclipse.tigris.org/update，Eclipse就会自已安装上了. <br />安装完成后，在Eclipse的plugins中就会多了5个包，命名为org.tigris.subversion.*的都应该是了。打开Eclipse,window->show view窗口中多了一个SVN文件夹，到此就证明svn插件成功的安装上了。具体的使用方法，在Eclipse的Help中有详细的帮助Subclipse - Subversion Eclipse Plugin，教你一步一步的使用SVN的客户端了。如果你对subversion想进行深入的了解，那么看看help中的Version Control with Subversion一定有所收获，通过本人的观察，这份文档和sbuversion安装文件中提供的官方文档一样，这里看起来就更舒服些了。
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/175046#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 23 Mar 2008 12:34:08 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/175046</link>
        <guid>http://xjh.javaeye.com/blog/175046</guid>
      </item>
          <item>
        <title>学习ruby on rails 笔记（第一版）depot源代码</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/163594" style="color:red;">http://xjh.javaeye.com/blog/163594</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          完整的Depot应用源代码 Source Code<br /><br />参考 《应用 Rails 进行敏捷 Web 开发》第一版<br /><br />林芷薰 翻译<br />透明 审校<br /><br />Database Files<br />数据库文件<br />D:\work\depot\config\database.yml<br /><pre name="code" class="ruby">
development:
  adapter: mysql
  database: depot_development
  username: root
  password:
  host: localhost

# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  database: depot_test
  username: root
  password:
  host: localhost

production:
  adapter: mysql
  database: depot_production
  username: root
  password: 
  host: localhost
</pre><br /><br />D:\work\depot\db\create.sql<br /><pre name="code" class="ruby">
drop table if exists users;
drop table if exists line_items;
drop table if exists orders;
drop table if exists products;

create table products (
	id							int						not null auto_increment,
	title						varchar(100)	not null,
	description			text					not null,
	image_url				varchar(200)	not null,
	price						decimal(10,2)	not null,
	date_available	datetime			not null,
	primary key(id)
);

create table orders (
	id          int           not null auto_increment,
	name			  varchar(100)  not null,
	email       varchar(255)  not null,
	address     text          not null,
	pay_type    char(10)      not null,
	shipped_at  datetime      null,
	primary key (id)
);

create table line_items (
	id							int							not null auto_increment,
	product_id			int							not null,
	order_id		  	int							not null,
	quantity				int							not null default 0,
	unit_price			decimal(10,2)		not null,
	constraint fk_items_product foreign key (product_id) references products(id),
	constraint fk_items_order foreign key (order_id) references orders(id),
	primary key (id)
);

create table users (
	id              int not null    auto_increment,
	name            varchar(100)    not null,
	hashed_password char(40)        null,
	primary key (id)
);

/* password = 'admin' */
insert into users values(null, 'admin','d033e22ae348aeb5660fc2140aec35850c4da997');
</pre><br /><br />D:\work\depot\db\product_data.sql<br /><br /><pre name="code" class="ruby">
lock tables products write;
insert into products(	title, description, image_url, price, date_available ) values(
											'Pragmatic Project Automation',
											'A really great read!',
                      'http://localhost:3000/images/svn.JPG',
                      '29.95',
                      '2007-12-25 05:00:00'	);
insert into products(	title, description, image_url, price, date_available ) values(
                      'Pragmatic Version Control',
                      'A really contrlooed read!',
                      'http://localhost:3000/images/utc.jpg',
                      '29.95',
                      '2007-12-01 05:00:00');
insert into products(  title, description, image_url, price, date_available ) values(
                     'Pragmatic Version Control2',
                     'A really contrlooed read!',
                     'http://localhost:3000/images/auto.jpg',
                     '29.95',
                     '2007-12-01 05:00:00');
unlock tables;
</pre><br /><br />D:\work\depot\db\product_data2.sql<br /><br /><pre name="code" class="ruby">
lock tables products write;
insert into products(	title, description, image_url, price, date_available ) values(
											'Pragmatic Project Automation',
											'A really great read!',
                      '/images/svn.JPG',
                      '29.95',
                      '2007-12-25 05:00:00'	);
insert into products(	title, description, image_url, price, date_available ) values(
                      'Pragmatic Version Control',
                      'A really contrlooed read!',
                      '/images/utc.jpg',
                      '29.95',
                      '2007-12-01 05:00:00');
insert into products(  title, description, image_url, price, date_available ) values(
                     'Pragmatic Version Control2',
                     'A really contrlooed read!',
                     '/images/auto.jpg',
                     '29.95',
                     '2007-12-01 05:00:00');
unlock tables;
</pre><br /><br />控制器<br />D:\work\depot\app\controllers\application.rb<br /><pre name="code" class="ruby">
class ApplicationController &lt; ActionController::Base
	model :cart
	model :line_item
	
  # Pick a unique cookie name to distinguish our session data from others'
  session :session_key => '_depot_session_id'

  private
  def redirect_to_index(msg = nil)
  	flash[:notice] = msg if msg
  	redirect_to(:action => 'index')
  end
  
  def authorize
  	unless session[:user_id]
  		flash[:notice] = "Please log in"
  		redirect_to(:controller => "login", :action => "login")
  	end
  end
  
end
</pre><br /><br />D:\work\depot\app\controllers\admin_controller.rb<br /><pre name="code" class="ruby">
class AdminController &lt; ApplicationController	
	before_filter :authorize

  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :list }
         
  def index
    list
    render :action => 'list'
  end
  
  def list
    @product_pages, @products = paginate :products, :per_page => 10
  end

  def show
    @product = Product.find(params[:id])
  end

  def new
    @product = Product.new
  end

  def create
    @product = Product.new(params[:product])
    if @product.save
      flash[:notice] = 'Product was successfully created.'
      redirect_to :action => 'list'
    else
      render :action => 'new'
    end
  end

  def edit
    @product = Product.find(params[:id])
  end

  def update
    @product = Product.find(params[:id])
    if @product.update_attributes(params[:product])
      flash[:notice] = 'Product was successfully updated.'
      redirect_to :action => 'show', :id => @product
    else
      render :action => 'edit'
    end
  end

  def destroy
    Product.find(params[:id]).destroy
    redirect_to :action => 'list'
  end
  
  def ship
  	count = 0
  	if things_to_ship = params[:to_be_shipped]
  		count = do_shipping(things_to_ship)
  		if count > 0
  			count_text = pluralize(count, "order")
  			flash.now[:notice] = "#{count_text} marked as shipped"
  		end
  	end
  	@penging_orders = Order.pending_shipping
  end
  
  private
  def do_shipping(things_to_ship)
  	count = 0
  	things_to_ship.each do |order_id, do_it|
  		if do_it == "yes"
  			order = Order.find(order_id)
  			order.mark_as_shipped
  			order.save
  			count += 1
  		end
  	end
  	count
  end
  
  def pluralize(count, noun)
  	case count
  	when 0: "No #{noun.pluralize}"
  	when 1: "One #{noun}"
  	else "#{count} #{noun.pluralize}"
  	end
  end
  
end

</pre><br /><br />D:\work\depot\app\controllers\login_controller.rb<br /><pre name="code" class="ruby">
class LoginController &lt; ApplicationController
	layout "admin"	
	before_filter :authorize, :except => :login
	
	def index
  	@total_orders = Order.count
  	@pending_orders = Order.count_pending
  end
  
  def login
  	if request.get?
  		session[:user_id] = nil
  		@user = User.new
  	else
  		@user = User.new(params[:user])
  		logged_in_user = @user.try_to_login
  		if logged_in_user
  			session[:user_id] = logged_in_user.id
  			redirect_to(:action => "index")
  		else
  			flash[:notice] = "Invalid user/password conbination"
  		end
  	end
  end
	
  def add_user
  	if request.get?
  		@user = User.new
  	else
  		@user = User.new(params[:user])
  		if @user.save
  			redirect_to_index("User #{@user.name} created")
  		end
  	end
  end
  
  def delete_user
  	id = params[:id]
  	if id &amp;&amp; user = User.find(id)
  		begin
  			user.destroy
  			flash[:notice] = "User #{user.name} deleted"
  		rescue
  			flash[:notice] = "Can't delete that user"
  		end
  	end
  	redirect_to(:action => :list_users)
  end

  def list_users
  	@all_users = User.find(:all)
  end
  
  def logout
  	session[:user_id] = nil
  	flash[:notice] = "Logged out"
  	redirect_to(:action => "login")
  end

end

</pre><br /><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><br /><pre name="code" class="ruby">
class StoreController &lt; ApplicationController

	before_filter :find_cart, :except => :index

  def index
  	@products = Product.salable_items
  end
  
  def add_to_cart
  	product = Product.find(params[:id])
  	@cart.add_product(product)
  	redirect_to(:action => 'display_cart')
  rescue
  	logger.error("Attempt to access invalid product #{params[:id]}")
  	redirect_to_index('Invalid product')
  end

  def display_cart
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index('Your cart is currently empty')
  	end
  	if params[:context] == :checkout
  		render(:layout => false)
  	end
  end
  
	def empty_cart
		@cart.empty!
		redirect_to_index('Your cart is now empty')
	end
  
  def checkout
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index("There's nothing in your cart!")
  	else
  		@order = Order.new
  	end
  end
  
  def save_order
  	@order = Order.new(params[:order])
  	@order.line_items &lt;&lt; @cart.items
  	if @order.save
  		@cart.empty!
  		redirect_to_index('Thank you for your order.')
  	else
  		render(:action => 'checkout')
  	end
  end
  
  private  
  def find_cart
  	@cart = (session[:cart] ||= Cart.new)
  end
  
end

</pre><br /><br />模型<br /><br />D:\work\depot\app\models\cart.rb<br /><pre name="code" class="ruby">
class Cart
	attr_reader :items
	attr_reader :total_price
	def initialize
		empty!
	end
	
	def empty!
		@items = []
		@total_price = 0.0
	end
	
	def add_product(product)
		item = @items.find {|i| i.product_id == product.id}
		if item
			item.quantity += 1
		else
			item = LineItem.for_product(product)
			@items &lt;&lt; item
		end
		@total_price += product.price
	end
end
</pre><br /><br /><br /><br />D:\work\depot\app\models\line_item.rb<br /><br /><pre name="code" class="ruby">
class LineItem &lt; ActiveRecord::Base
	belongs_to :product
	belongs_to :order
	def self.for_product(product)
		item = self.new
		item.quantity = 1
		item.product = product
		item.unit_price = product.price
		item
	end
end

</pre><br /><br /><br /><br />D:\work\depot\app\models\order.rb<br /><br /><pre name="code" class="ruby">
class Order &lt; ActiveRecord::Base
	has_many :line_items
	
	PAYMENT_TYPES = [
		[ "Check",					"check"],
		[ "Credit Card",		"cc"],
		[ "Purchas Order",	"po"]
	].freeze  # freeze to make this array constant
	
	validates_presence_of :name, :email, :address, :pay_type
	
	def self.pending_shipping
		find(:all, :conditions => "shipped_at is null")
	end
	
	def self.count_pending
		count("shipped_at is null")
	end
	
	def mark_as_shipped
		self.shipped_at = Time.now
	end
		
end

</pre><br /><br /><br /><br />D:\work\depot\app\models\product.rb<br /><br /><br /><pre name="code" class="ruby">
class Product &lt; ActiveRecord::Base
	validates_presence_of	:title, :description, :image_url
	validates_numericality_of :price
	validates_uniqueness_of :title
	validates_format_of :image_url,
	                    :with    => %r{^http:.+\.(gif|jpg|png)$}i,
	                    :message => "must be a URL for a GIF, JPG, or PNG image"

	def self.salable_items
		find(:all,
				 :conditions		=> 	"date_available &lt;= now()",
				 :order					=> "date_available desc")
	end	
	
	protected
	def validate
		errors.add(:price, "should be positive") unless price.nil? || price >= 0.01
	end

end

</pre><br /><br /><br />D:\work\depot\app\models\user.rb<br /><pre name="code" class="ruby">
require "digest/sha1"
class User &lt; ActiveRecord::Base
	attr_accessor :password
	attr_accessible :name, :password
	validates_uniqueness_of :name
	validates_presence_of :name, :password

	def self.login(name, password)
		hashed_password = hash_password(password || "")
		find(:first,
		     :conditions => ["name = ? and hashed_password = ?",
		                      name, hashed_password])
	end
	
	def try_to_login
		User.login(self.name, self.password)
		User.find_by_name_and_hashed_password(name, "")
	end
	
	def before_create
		self.hashed_password = User.hash_password(self.password)
	end

	
	before_destroy :dont_destroy_admin
	def dont_destroy_admin
		raise "Can't destroy admin" if self.name == 'admin'
	end
		
	def after_create
		@password = nil
	end	

	private
	def self.hash_password(password)
		Digest::SHA1.hexdigest(password)
	end
	
end
</pre><br /><br /><br />视图<br /><br />D:\work\depot\app\views\layouts\admin.rhtml<br /><br /><pre name="code" class="ruby">
&lt;html>
&lt;head>
  &lt;title>ADMINISTER Pragprog Books Online Store&lt;/title>
  &lt;%= stylesheet_link_tag 'scaffold', 'depot', 'admin', :media => "all" %>
&lt;/head>
&lt;body>
	&lt;div id="banner">
		&lt;%= @page_title || "Adminster Bookshelf" %>
	&lt;/div>
	&lt;div id="columns">
		&lt;div id="side">
			&lt;% if session[:user_id] -%>
			&lt;%= link_to("Products", :controller => "admin", :action => "list") %>&lt;br />
			&lt;%= link_to("Shipping", :controller => "admin", :action => "ship") %>&lt;br />
			&lt;hr />
			&lt;%= link_to("Add user", :controller => "login", :action => "add_user") %>&lt;br />
			&lt;%= link_to("List users", :controller => "login", :action => "list_users") %>&lt;br />
			&lt;hr />
			&lt;%= link_to("Log out", :controller => "login", :action => "logout") %>
			&lt;% end -%>
		&lt;/div>
		&lt;div id="main">
			&lt;% if flash[:notice] -%>
				&lt;div id="notice">&lt;%= flash[:notice] %>&lt;/div>
			&lt;% end -%>
			&lt;%= @content_for_layout %>
		&lt;/div>
	&lt;/div>
&lt;/body>
&lt;/html>
</pre><br /><br />D:\work\depot\app\views\layouts\store.rhtml<br /><pre name="code" class="ruby">
&lt;html>
	&lt;head>
		&lt;title>Pragprog Books Online Store&lt;/title>
		&lt;%= stylesheet_link_tag "scaffold", "depot", :media => "all" %>
	&lt;/head>
	&lt;body>
		&lt;div id="banner">
			&lt;img src="/images/logo.png" />
			&lt;%= @page_title || "Pragmatic Bookshelf" %>
		&lt;/div>
		&lt;div id="columns">
			&lt;div id="side">
				&lt;a href="http://www....">Home&lt;/a>&lt;br />
				&lt;a href="http://www..../faq">Questions&lt;/a>&lt;br />
				&lt;a href="http://www..../news">News&lt;/a>&lt;br />
				&lt;a href="http://www..../contact">Contact&lt;/a>&lt;br />
			&lt;/div>
			&lt;div id="main">
				&lt;% if @flash[:notice] -%>
					&lt;div id="notice">&lt;%= @flash[:notice] %>&lt;/div>
				&lt;% end -%>
				&lt;%= @content_for_layout %>
			&lt;/div>
		&lt;/div>
	&lt;/body>
&lt;/html>
</pre><br /><br /><br />D:\work\depot\app\views\admin\_order_line.rhtml<br /><br /><pre name="code" class="ruby">
&lt;tr valign="top">
	&lt;td class="olnamebox">
		&lt;div class="olnamebox">&lt;%= h(order_line.name) %>&lt;/div>
		&lt;div class="oladdress">&lt;%= h(order_line.address) %>&lt;/div>
	&lt;/td>
	&lt;td class="olitembox">
		&lt;% order_line.line_items.each do |li| %>
			&lt;div class="olitem">
				&lt;span class="olitemqty">&lt;%= li.quantity %>&lt;/span>
				&lt;span class="olitemtitle">&lt;%= li.product.title %>&lt;/span>
			&lt;/div>
		&lt;% end %>
	&lt;/td>
	&lt;td>
		&lt;%= check_box("to_be_shipped", order_line.id, {}, "yes", "no") %>
	&lt;/td>
&lt;/tr>
</pre><br /><br />D:\work\depot\app\views\admin\list.rhtml<br /><br /><pre name="code" class="ruby">
&lt;h1>Products Listing &lt;/h1>
&lt;table cellpadding="5" cellspacing="0">
&lt;%
odd_or_even = 0
for product in @products
	odd_or_even = 1 - odd_or_even
%>
	&lt;tr valign="top" class="ListLine&lt;%= odd_or_even %>">
		&lt;td>
			&lt;img width="60" height="70" src="&lt;%= product.image_url %>"/>
		&lt;/td>
		&lt;td width="60%">
			&lt;span class="ListTitle">&lt;%= h(product.title) %>&lt;/span>&lt;br />
			&lt;%= h(truncate(product.description, 80)) %>
		&lt;/td>
		&lt;td allign="right">
			&lt;%= product.date_available.strftime("%y-%m-%d") %>&lt;br />
			&lt;strong>$&lt;%= sprintf("%0.2f", product.price) %>&lt;/strong>
		&lt;/td>
		&lt;td class="ListActions">
			&lt;%= link_to 'Show', :action => 'show', :id => product %>&lt;br />
			&lt;%= link_to 'Edit', :action => 'edit', :id => product %>&lt;br />
			&lt;%= link_to 'Destroy', { :action => 'destroy', :id => product }, :confirm => 'Are you sure?', :method => :post %>
		&lt;/td>	
  &lt;tr>
  &lt;% end %>
&lt;/table>
  &lt;%= if @product_pages.current.previous
  			link_to ('Previous page', { :page => @product_pages.current.previous })
  		end
  %>
  &lt;%= if @product_pages.current.next
  			link_to ('Next page', { :page => @product_pages.current.next })
  		end 
  %>
&lt;br />
&lt;%= link_to 'New product', :action => 'new' %>
</pre><br /><br />D:\work\depot\app\views\admin\ship.rhtml<br /><pre name="code" class="ruby">
&lt;div class="olheader">Orders To Be Shipped&lt;/div>
&lt;%= form_tag(:action => "ship") %>
&lt;table cellpadding="5" cellspacing="0">
&lt;%= render(:partial => "order_line", :collection => @pending_orders) %>
&lt;/table>
&lt;br />
&lt;input type="submit" value=" SHIP CHECKED ITEMS " />
&lt;%= end_form_tag %>
&lt;br />

</pre><br /><br /><br />D:\work\depot\app\views\login\add_user.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "Add a User" -%>
&lt;%= error_messages_for 'user' %>
&lt;%= form_tag %>
&lt;table>
	&lt;tr>
		&lt;td>User name:&lt;/td>
		&lt;td>&lt;%= text_field("user", "name") %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Password:&lt;/td>
		&lt;td>&lt;%= password_field("user", "password") %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;input type="submit" value=" ADD USER " />&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>
</pre><br /><br /><br />D:\work\depot\app\views\login\index.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "Administer your Store" -%>
&lt;h1>Depot Store Status&lt;/h1>
&lt;p>
	Total orders in system: &lt;%= @total_orders %>
&lt;/p>
&lt;p>
	Orders pending shipping: &lt;%= @pending_orders %>
&lt;/p>
</pre><br /><br />D:\work\depot\app\views\login\list_users.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "User List" -%>
&lt;table>
&lt;% for user in @all_users -%>
&lt;tr>
	&lt;td>&lt;%= user.name %>&lt;/td>
	&lt;td>&lt;%= link_to("(delete)", :action => :delete_user, :id => user.id) %>&lt;/td>
&lt;/tr>
&lt;% end %>
&lt;/table>
</pre><br /><br />D:\work\depot\app\views\login\login.rhtml<br /><br /><pre name="code" class="ruby">
&lt;%= form_tag %>
&lt;table>
	&lt;tr>
		&lt;td>User name:&lt;/td>
		&lt;td>&lt;%= text_field("user", "name") %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Password&lt;/td>
		&lt;td>&lt;%= password_field("user", "password") %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;input type="submit" value=" LOGIN " />&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>
</pre><br /><br />D:\work\depot\app\views\store\checkout.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "Checkout" -%>
&lt;%= error_messages_for("order") %>
&lt;%= render_component(:acton => "display_cart",
                     :params => { :context => :checkout }) %>
&lt;h3>Please enter your details below&lt;/h3>
&lt;%= start_form_tag(:action => "save_order") %>
&lt;table>
	&lt;tr>
		&lt;td>Name:&lt;/td>
		&lt;td>&lt;%= text_field("order", "name", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>EMail:&lt;/td>
		&lt;td>&lt;%= text_field("order", "email", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td>Address:&lt;/td>
		&lt;td>&lt;%= text_area("order", "address", "cols" => 40, "rows" => 5) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Pay using:&lt;/td>
		&lt;td>&lt;%=
			options = [["Select a payment option", ""]] + Order::PAYMENT_TYPES
			select("order", "pay_type", options) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;%= submit_tag(" CHECKOUT ") %>&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>		
</pre><br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "Your Pragmatic Cart" -%>
&lt;div id="cartmenu">
	&lt;u1>
		&lt;li>&lt;%= link_to 'Continue shopping', :action => "index" %>&lt;/li>
		&lt;% unless params[:context] == :checkout -%>
		&lt;li>&lt;%= link_to 'Empty car', :action => "empty_cart" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Checkout', :action => "checkout" %>&lt;/li>
		&lt;% end -%>
	&lt;/u1>
&lt;/div>
&lt;table cellpadding="10" cellspacing="0">
	&lt;tr class="carttitle">
		&lt;td rowspan="2">Qty&lt;/td>
		&lt;td rowspan="2">Description&lt;/td>
		&lt;td colspan="2">Price&lt;/td>
	&lt;/tr>
	&lt;tr class="carttitle">
		&lt;td>Each&lt;/td>
		&lt;td>Total&lt;/td>
	&lt;/tr>
&lt;%
for item in @items
	product = item.product
-%>
	&lt;tr>
		&lt;td>&lt;%= item.quantity %>&lt;/td>
		&lt;td>&lt;%= h(product.title) %>&lt;/td>
		&lt;td align="right">&lt;%= fmt_dollars(item.unit_price) %>&lt;/td>
		&lt;td align="right">&lt;%= fmt_dollars(item.unit_price * item.quantity) %>&lt;/td>
	&lt;/tr>
&lt;% end %>
	&lt;tr>
		&lt;td colspan="3" align="right">&lt;strong>Total:&lt;/strong>&lt;/td>
		&lt;td id="totalcell">&lt;%= fmt_dollars(@cart.total_price) %>&lt;/td>
	&lt;/tr>
&lt;/table>
</pre><br /><br />D:\work\depot\app\views\store\index.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% for product in @products %>
	&lt;div class="catalogentry">
		&lt;img src="&lt;%= product.image_url %>"/>
		&lt;h3>&lt;%= h(product.title) %>&lt;/h3>
		&lt;%= product.description %>
		&lt;span class="catalogprice">&lt;%= fmt_dollars(product.price) %>&lt;/span>		
		&lt;%= link_to 'Add to Cart',
										{:action => 'add_to_cart', :id => product },
										:class => 'addtocart' %>&lt;br />
	&lt;div class="separator">&amp;nbsp;&lt;/div>
&lt;% end %>
&lt;%= link_to "Show my cart", :action => "display_cart" %>
</pre><br /><br />辅助模块<br /><br />D:\work\depot\app\helpers\application_helper.rb<br /><br /><pre name="code" class="ruby">
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
	def fmt_dollars(amt)
		sprintf("$%0.2f", amt)
	end
end
</pre><br /><br /> CSS 文件<br /><br />D:\work\depot\public\stylesheets\depot.css<br /><br /><pre name="code" class="ruby">
/* Global styles */

/* START:notice */
#notice {
  border: 2px solid red;
  padding: 1em;
  margin-bottom: 2em;
  background-color: #f0f0f0;
  font: bold smaller sans-serif;
}
/* END:notice */

/* Styles for admin/list */

#product-list .list-title {
	color:        #244;
	font-weight:  bold;
	font-size:    larger;
}

#product-list .list-image {
  width:        60px;
  height:       70px;
}


#product-list .list-actions {
  font-size:    x-small;
  text-align:   right;
  padding-left: 1em;
}

#product-list .list-line-even {
  background:   #e0f8f8;
}

#product-list .list-line-odd {
  background:   #f8b0f8;
}


/* Styles for main page */

#banner {
  background: #9c9;
  padding-top: 10px;
  padding-bottom: 10px;
  border-bottom: 2px solid;
  font: small-caps 40px/40px "Times New Roman", serif;
  color: #282;
  text-align: center;
}

#banner img {
  float: left;
}

#columns {
  background: #141;
}

#main {
  margin-left: 15em;
  padding-top: 4ex;
  padding-left: 2em;
  background: white;
}

#side {
  float: left;
  padding-top: 1em;
  padding-left: 1em;
  padding-bottom: 1em;
  width: 14em;
  background: #141;
}

#side a {
  color: #bfb;
  font-size: small;
}

h1 {
  font:  150% sans-serif;
  color: #226;
  border-bottom: 3px dotted #77d;
}

/* And entry in the store catalog */

#store  .entry {
  border-bottom: 1px dotted #77d;
}

#store  .title {
  font-size: 120%;
  font-family: sans-serif;
}

#store .entry img {
  width: 75px;
  float: left;
}


#store .entry h3 {
 margin-bottom: 2px;
 color: #227;
}

#store .entry p {
 margin-top: 0px; 
 margin-bottom: 0.8em; 
}

#store .entry .price-line {
}

#store .entry .add-to-cart {
  position: relative;
}

#store .entry  .price {
  color: #44a;
  font-weight: bold;
  margin-right: 2em;
}

/* START:inline */
#store .entry form, #store .entry form div {
  display: inline;
}
/* END:inline */

/* START:cart */
/* Styles for the cart in the main page and the sidebar */

.cart-title {
  font: 120% bold; 
}

.item-price, .total-line {
  text-align: right;	
}

.total-line .total-cell {
  font-weight: bold;
  border-top: 1px solid #595;
}


/* Styles for the cart in the sidebar */

#cart, #cart table {
  font-size: smaller;	
  color:     white;

}

#cart table {
  border-top:    1px dotted #595;
  border-bottom: 1px dotted #595;
  margin-bottom: 10px;
}
/* END:cart */

/* Styles for order form */

.depot-form fieldset {
  background: #efe;
}

.depot-form legend {
  color: #dfd;
  background: #141;
  font-family: sans-serif;
  padding: 0.2em 1em;
}

.depot-form label {
  width: 5em;
  float: left;
  text-align: right;
  margin-right: 0.5em;
  display: block;
}

.depot-form .submit {
  margin-left: 5.5em;
}

/* The error box */

.fieldWithErrors {
  padding: 2px;
  background-color: red;
  display: table;
}

#errorExplanation {
  width: 400px;
  border: 2px solid red;
  padding: 7px;
  padding-bottom: 12px;
  margin-bottom: 20px;
  background-color: #f0f0f0;
}

#errorExplanation h2 {
  text-align: left;
  font-weight: bold;
  padding: 5px 5px 5px 15px;
  font-size: 12px;
  margin: -7px;
  background-color: #c00;
  color: #fff;
}

#errorExplanation p {
  color: #333;
  margin-bottom: 0;
  padding: 5px;
}

#errorExplanation ul li {
  font-size: 12px;
  list-style: square;
}

</pre><br /><br />D:\work\depot\public\stylesheets\admin.css<br /><br /><pre name="code" class="ruby">
#banner {
	background: #ecc;
	color: #822;
}
#columns {
	background: #411;
}
#side {
	background: #411;
}
#side a {
	color: #fdd;
}
@side a:hover {
	background: #411;
}
/* order shipping screen */
.olheader {
	font: bold large sans-serif;
	color: #411;
	margin-bottom: 2ex;
}
.olnamebox, .olitembox {
	padding-bottom: 3ex;
	padding-right: 3em;
	border-top: 1px dotted #411;
}
.olname {
	font-weight: bold;
}
.oladdress {
	font-size: smaller;
	white-space: pre;
}
.olitemqty {
	font-size: smaller;
	font-weight: bold;
}
.olitemqty:after {
	content: " x ";
}
.olitemtitle {
	font-weight: bold;
}
.ListTitle {
	color: #244;
	font-weight: bold;
	font-size: larger;
}
.ListActions {
	font-size: x-small;
	text-align: right;
	padding-left: lem;
}
.ListLine0 {
	background: #e0f8f8;
}
.ListLine1 {
	background: #f8e0f8;
}
</pre><br /><br />D:\work\depot\public\stylesheets\scaffold.css<br /><pre name="code" class="ruby">
body { background-color: #fff; color: #333; }

body, p, ol, ul, td {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size:   13px;
  line-height: 18px;
}

pre {
  background-color: #eee;
  padding: 10px;
  font-size: 11px;
}

a { color: #000; }
a:visited { color: #666; }
a:hover { color: #fff; background-color:#000; }

.fieldWithErrors {
  padding: 2px;
  background-color: red;
  display: table;
}

#errorExplanation {
  width: 400px;
  border: 2px solid red;
  padding: 7px;
  padding-bottom: 12px;
  margin-bottom: 20px;
  background-color: #f0f0f0;
}

#errorExplanation h2 {
  text-align: left;
  font-weight: bold;
  padding: 5px 5px 5px 15px;
  font-size: 12px;
  margin: -7px;
  background-color: #c00;
  color: #fff;
}

#errorExplanation p {
  color: #333;
  margin-bottom: 0;
  padding: 5px;
}

#errorExplanation ul li {
  font-size: 12px;
  list-style: square;
}

div.uploadStatus {
  margin: 5px;
}

div.progressBar {
  margin: 5px;
}

div.progressBar div.border {
  background-color: #fff;
  border: 1px solid grey;
  width: 100%;
}

div.progressBar div.background {
  background-color: #333;
  height: 18px;
  width: 0%;
}

.ListTitle {
	color:				#244;
	font-weight:	bold;
	font-size:		larger;
}

.ListActions {
	font-size:		x-small;
	text-align:		right;
	padding-left:	lem;
}

.ListLine0 {
	background:		#e0f8f8;
}

.ListLine1 {
	background:		#f8b0f8;
}
</pre><br /><br />以上代码 完全参考书本 考虑到 第一版的 代码下载官方网站已经没有提供了，所以特意贴出来，为今后无论是自己还是别人如果看的书是第一版的，免得输入累。
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/163594#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 12:21:47 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/163594</link>
        <guid>http://xjh.javaeye.com/blog/163594</guid>
      </item>
          <item>
        <title>学习ruby on rails 笔记（第一版）</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/163315" style="color:red;">http://xjh.javaeye.com/blog/163315</a>&nbsp;
          发表时间: 2008年02月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我用的 Rails 和 Ruby 的版本：<br />D:\work\depot>rails -v<br />Rails 1.2.6<br /><br />D:\work\depot>ruby -v<br />ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]<br /><br />第六章 任务A 货品维护<br /><br />rails depot<br /><br />ruby script/server scaffold Product Admin<br /><br />ruby script/server<br /><br />http://localhost:3000/admin<br /><br /><br />depot 数据库的脚本<br />D:\work>mysql -u root<br />Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br />Your MySQL connection id is 12 to server version: 5.0.27-community-nt<br /><br />Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br /><br />建立数据库：<br />create database depot_development;<br />create database depot_test;<br />create database depot_production;<br /><br />D:\work\depot>mysql -u root -p<br />Enter password:<br />Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br />Your MySQL connection id is 7 to server version: 5.0.27-community-nt<br /><br />Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br /><br />mysql> grant all on depot_development.* to 'root'@'localhost';<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql> grant all on depot_test.* to 'root'@'localhost';<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql> grant all on depot_production.* to 'root'@'localhost';<br />Query OK, 0 rows affected (0.00 sec)<br /><br />删除数据库：<br />drop database depot_development;<br />drop database depot_test;<br />drop database depot_production;<br /><br />mysql> use mysql<br />Database changed<br />mysql> show databases;<br />+--------------------+<br />| Database&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+--------------------+<br />| information_schema |<br />| depot_development&nbsp; |<br />| depot_production&nbsp;&nbsp; |<br />| depot_test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| mysql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+--------------------+<br />5 rows in set (0.00 sec)<br /><br />mysql> drop database depot_development;<br />Query OK, 1 row affected (0.06 sec)<br /><br />mysql> drop database depot_test;<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql> drop database depot_production;<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql><br /><br />显示所有数据库：<br />show databases;<br /><br />选择数据库：<br />use depot_development<br /><br />mysql> use depot_development<br />Database changed<br />mysql> use mysql<br />Database changed<br />mysql> use depot_development; 这个地方可要';' 也可不要';'<br />Database changed<br /><br />显示所有表:<br />show tables;<br /><br />创建货品表（create_0.sql 的内容）：<br />drop table if exists products;<br />create table products (<br />	id						int							not null auto_increment,<br />	title					varchar(100)		not null,<br />	description		text						not null,<br />	image_url			varchar(200)		not null,<br />	price					decimal(10,2)		not null,<br />	primary key(id)<br />);<br /><br />执行 SQL 语句：<br />建表：<br />mysql depot_development &lt;db/create.sql<br />删除表中数据：<br />mysql> delete from products;<br />Query OK, 4 rows affected (0.03 sec)<br /><br />D:\work\depot>mysql depot_development &lt;db/create.sql （没有指定用户出错了）<br />ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)<br /><br />D:\work\depot>mysql -u root depot_development &lt;db/create.sql<br /><br />D:\work\depot>mysql -u root depot_development &lt;db/product_data.sql （导入数据）<br /><br />D:\work\depot>mysql -u root -p<br />Enter password:<br />Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br />Your MySQL connection id is 10 to server version: 5.0.27-community-nt<br /><br />Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br /><br />mysql> use depot_development<br />Database changed<br />mysql> show tables;<br />+-----------------------------+<br />| Tables_in_depot_development |<br />+-----------------------------+<br />| products&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+-----------------------------+<br />1 row in set (0.00 sec)<br /><br />mysql> select * from products;<br />Empty set (0.00 sec)<br /><br />mysql><br /><br /><br />添加缺失的字段 ：<br />alter table products add column date_available datetime; 这个是以前老的方法，不建议采用<br /><br />创建货品表（create_1.sql 的内容）：<br />drop table if exists products;<br />create table products (<br />	id							int						not null auto_increment,<br />	title						varchar(100)	not null,<br />	description			text					not null,<br />	image_url				varchar(200)	not null,<br />	price						decimal(10,2)	not null,<br />	date_available	datetime			not null,<br />	primary key(id)<br />);<br /><br /><br />product.rb<br /><pre name="code" class="ruby">
class Product &lt; ActiveRecord::Base
	validates_presence_of	:title, :description, :image_url
	validates_numericality_of :price
	validates_uniqueness_of :title
	validates_format_of :image_url,
	                    :with    => %r{^http:.+\.(gif|jpg|png)$}i,
	                    :message => "must be a URL for a GIF, JPG, or PNG image"
	protected
	def validate
		errors.add(:price, "should be positive") unless price.nil? || price >= 0.01
	end
end
</pre><br /><br /><br />D:\work\depot\app\views\admin\list.rhtml<br /><br /><pre name="code" class="ruby">
&lt;h1>Products Listing &lt;/h1>
&lt;table cellpadding="5" cellspacing="0">
&lt;%
odd_or_even = 0
for product in @products
	odd_or_even = 1 - odd_or_even
%>
	&lt;tr valign="top" class="ListLine&lt;%= odd_or_even %>">
		&lt;td>
			&lt;img width="60" height="70" src="&lt;%= product.image_url %>"/>
		&lt;/td>
		&lt;td width="60%">
			&lt;span class="ListTitle">&lt;%= h(product.title) %>&lt;/span>&lt;br />
			&lt;%= h(truncate(product.description, 80)) %>
		&lt;/td>
		&lt;td allign="right">
			&lt;%= product.date_availbale.strftime("%y-%m-%d") %>&lt;br />
			&lt;strong>$&lt;%= sprintf("%0.2f", product.price) %>&lt;/strong>
		&lt;/td>
		&lt;td class="ListActions">
			&lt;%= link_to 'Show', :action => 'show', :id => product %>&lt;br />
			&lt;%= link_to 'Edit', :action => 'edit', :id => product %>&lt;br />
			&lt;%= link_to 'Destroy', { :action => 'destroy', :id => product }, :confirm => 'Are you sure?', :method => :post %>
		&lt;/td>	
  &lt;tr>
  &lt;% end %>
  &lt;/table>
  &lt;%= if @product_pages.current.previous
  			link_to ('Previous page', { :page => @product_pages.current.previous })
  		end
  %>
  &lt;%= if @product_pages.current.next
  			link_to ('Next page', { :page => @product_pages.current.next })
  		end 
  %>
&lt;br />
&lt;%= link_to 'New product', :action => 'new' %>
</pre><br /><br />修改样式文件<br />D:\work\depot\public\stylesheets\scaffold.css<br /><br /><pre name="code" class="ruby">
.ListTitle {
	color:				#244;
	font-weight:	bold;
	font-size:		larger;
}

.ListActions {
	font-size:		x-small;
	text-align:		right;
	padding-left:	lem;
}

.ListLine0 {
	background:		#e0f8f8;
}

.ListLine1 {
	background:		#f8b0f8;
}
</pre><br /><br />新增货品的时候输入的图片地址<br />http://localhost:3000/images/svn.JPG<br />http://localhost:3000/images/utc.jpg<br />http://localhost:3000/images/auto.jpg<br /><br />第七章 任务B 分类显示<br /><br />ruby script/generate controller Store index<br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><br /><pre name="code" class="ruby">
class StoreController &lt; ApplicationController

  def index
  	@products = Product.salable_items
  end  
end
</pre><br /><br />D:\work\depot\app\models\product.rb<br /><pre name="code" class="ruby">
class Product &lt; ActiveRecord::Base
	validates_presence_of	:title, :description, :image_url
	validates_numericality_of :price
	validates_uniqueness_of :title
	validates_format_of :image_url,
	                    :with    => %r{^http:.+\.(gif|jpg|png)$}i,
	                    :message => "must be a URL for a GIF, JPG, or PNG image"
	protected
	def validate
		errors.add(:price, "should be positive") unless price.nil? || price >= 0.01
	end
	
	def self.salable_items
		find(:all,
				 :conditions		=> 	"date_available &lt;= now()",
				 :order					=> "date_available desc")
	end
end
</pre><br /><br />D:\work\depot\app\views\store\index.rhtml<br /><pre name="code" class="ruby">
&lt;table cellpadding="5" cellspacing="0">
&lt;% for product in @products %>
	&lt;tr valign="top">
		&lt;td>
			&lt;img src="&lt;%= product.image_url %>"/>
		&lt;/td>
		&lt;td width="450">
			&lt;h3>&lt;%=h product.title %>&lt;/h3>
			&lt;small>
				&lt;%= product.description %>
			&lt;/small>
			&lt;br />
			&lt;strong>$&lt;%= sprintf("%0.2f", product.price) %>&lt;/strong>
			&lt;%= link_to 'Add to Cart',
										:action => 'add_to_cart',
										:id => product %>
			&lt;br />
		&lt;/td>
	&lt;/tr>
	&lt;tr>&lt;td colspan="2">&lt;hr/>&lt;/td>&lt;/tr>
&lt;% end %>
&lt;/table>
</pre><br /><br />D:\work\depot\app\views\layouts\store.rhtml<br /><pre name="code" class="ruby">
&lt;html>
	&lt;head>
		&lt;title>Pragprog Books Online Store&lt;/title>
		&lt;%= stylesheet_link_tag "depot", :media => "all" %>
	&lt;/head>
	&lt;body>
		&lt;div id="banner">
			&lt;img src="/images/logo.png" />
			&lt;%= @page_title || "Pragmatic Bookshelf" %>
		&lt;/div>
		&lt;div id="columns">
			&lt;div id="side">
				&lt;a href="http://www....">Home&lt;/a>&lt;br />
				&lt;a href="http://www..../faq">Questions&lt;/a>&lt;br />
				&lt;a href="http://www..../news">News&lt;/a>&lt;br />
				&lt;a href="http://www..../contact">Contact&lt;/a>&lt;br />
			&lt;/div>
			&lt;div id="main">
				&lt;%= @content_for_layout %>
			&lt;/div>
		&lt;/div>
	&lt;/body>
&lt;/html>
</pre><br /><br />D:\work\depot\app\views\store\index.rhtml<br /><pre name="code" class="ruby">
&lt;% for product in @products %>
	&lt;div class="catalogentry">
		&lt;img src="&lt;%= product.image_url %>"/>
		&lt;h3>&lt;%=h product.title %>&lt;/h3>
		&lt;%= product.description %>
		&lt;span class="catalogprice">$&lt;%= sprintf("%0.2f", product.price) %>&lt;/span>		
		&lt;%= link_to 'Add to Cart',
										{:action => 'add_to_cart', :id => product },
										:class => 'addtocart' %>&lt;br />
	&lt;div class="separator">&amp;nbsp;&lt;/div>
&lt;% end %>
&lt;%= link_to "Show my cart", :action => "display_cart" %>
</pre><br /><br />D:\work\depot\public\stylesheets\depot.css<br /><pre name="code" class="ruby">
/* Global styles */

/* START:notice */
#notice {
  border: 2px solid red;
  padding: 1em;
  margin-bottom: 2em;
  background-color: #f0f0f0;
  font: bold smaller sans-serif;
}
/* END:notice */

/* Styles for admin/list */

#product-list .list-title {
	color:        #244;
	font-weight:  bold;
	font-size:    larger;
}

#product-list .list-image {
  width:        60px;
  height:       70px;
}


#product-list .list-actions {
  font-size:    x-small;
  text-align:   right;
  padding-left: 1em;
}

#product-list .list-line-even {
  background:   #e0f8f8;
}

#product-list .list-line-odd {
  background:   #f8b0f8;
}


/* Styles for main page */

#banner {
  background: #9c9;
  padding-top: 10px;
  padding-bottom: 10px;
  border-bottom: 2px solid;
  font: small-caps 40px/40px "Times New Roman", serif;
  color: #282;
  text-align: center;
}

#banner img {
  float: left;
}

#columns {
  background: #141;
}

#main {
  margin-left: 15em;
  padding-top: 4ex;
  padding-left: 2em;
  background: white;
}

#side {
  float: left;
  padding-top: 1em;
  padding-left: 1em;
  padding-bottom: 1em;
  width: 14em;
  background: #141;
}

#side a {
  color: #bfb;
  font-size: small;
}

h1 {
  font:  150% sans-serif;
  color: #226;
  border-bottom: 3px dotted #77d;
}

/* And entry in the store catalog */

#store  .entry {
  border-bottom: 1px dotted #77d;
}

#store  .title {
  font-size: 120%;
  font-family: sans-serif;
}

#store .entry img {
  width: 75px;
  float: left;
}


#store .entry h3 {
 margin-bottom: 2px;
 color: #227;
}

#store .entry p {
 margin-top: 0px; 
 margin-bottom: 0.8em; 
}

#store .entry .price-line {
}

#store .entry .add-to-cart {
  position: relative;
}

#store .entry  .price {
  color: #44a;
  font-weight: bold;
  margin-right: 2em;
}

/* START:inline */
#store .entry form, #store .entry form div {
  display: inline;
}
/* END:inline */

/* START:cart */
/* Styles for the cart in the main page and the sidebar */

.cart-title {
  font: 120% bold; 
}

.item-price, .total-line {
  text-align: right;	
}

.total-line .total-cell {
  font-weight: bold;
  border-top: 1px solid #595;
}


/* Styles for the cart in the sidebar */

#cart, #cart table {
  font-size: smaller;	
  color:     white;

}

#cart table {
  border-top:    1px dotted #595;
  border-bottom: 1px dotted #595;
  margin-bottom: 10px;
}
/* END:cart */

/* Styles for order form */

.depot-form fieldset {
  background: #efe;
}

.depot-form legend {
  color: #dfd;
  background: #141;
  font-family: sans-serif;
  padding: 0.2em 1em;
}

.depot-form label {
  width: 5em;
  float: left;
  text-align: right;
  margin-right: 0.5em;
  display: block;
}

.depot-form .submit {
  margin-left: 5.5em;
}

/* The error box */

.fieldWithErrors {
  padding: 2px;
  background-color: red;
  display: table;
}

#errorExplanation {
  width: 400px;
  border: 2px solid red;
  padding: 7px;
  padding-bottom: 12px;
  margin-bottom: 20px;
  background-color: #f0f0f0;
}

#errorExplanation h2 {
  text-align: left;
  font-weight: bold;
  padding: 5px 5px 5px 15px;
  font-size: 12px;
  margin: -7px;
  background-color: #c00;
  color: #fff;
}

#errorExplanation p {
  color: #333;
  margin-bottom: 0;
  padding: 5px;
}

#errorExplanation ul li {
  font-size: 12px;
  list-style: square;
}
</pre><br /><br />第八章 任务C: 创建购物车<br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><pre name="code" class="ruby">
class StoreController &lt; ApplicationController

  def index
  	@products = Product.salable_items
  end
  
  private
  def find_cart
  	session[:cart] ||= Cart.new
  end
end
</pre><br /><br /><pre name="code" class="ruby">
drop table if exists line_items;
create table line_items (
	id							int							not null auto_increment,
	product_id			int							not null,
	quantity				int							not null default 0,
	unit_price			decimal(10,2)		not null,
	constraint fk_items_product foreign key (product_id) references products(id),
	primary key (id)
);
</pre><br /><br />D:\work\depot\db\product_data.sql<br /><br /><pre name="code" class="ruby">
lock tables products write;
insert into products(	title, description, image_url, price, date_available ) values(
											'Pragmatic Project Automation',
											'A really great read!',
                      'http://localhost:3000/images/svn.JPG',
                      '29.95',
                      '2007-12-25 05:00:00'	);
insert into products(	title, description, image_url, price, date_available ) values(
                      'Pragmatic Version Control',
                      'A really contrlooed read!',
                      'http://localhost:3000/images/utc.jpg',
                      '29.95',
                      '2007-12-01 05:00:00');
insert into products(  title, description, image_url, price, date_available ) values(
                     'Pragmatic Version Control2',
                     'A really contrlooed read!',
                     'http://localhost:3000/images/auto.jpg',
                     '29.95',
                     '2007-12-01 05:00:00');
unlock tables;
</pre><br /><br />D:\work\depot>mysql -u root depot_development &lt;db/product_data.sql （导入数据）<br /><br />下面说明在mysql中 exit 和 quit 命令都可以退出 mysql<br />D:\work\depot>mysql -u root<br />Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br />Your MySQL connection id is 41 to server version: 5.0.27-community-nt<br /><br />Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br /><br />mysql> use depot_development<br />Database changed<br />mysql> delete from products;<br />Query OK, 3 rows affected (0.05 sec)<br /><br />mysql> exit<br />Bye<br /><br />D:\work\depot>mysql -u root<br />Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br />Your MySQL connection id is 42 to server version: 5.0.27-community-nt<br /><br />Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br /><br />mysql> quit<br />Bye<br /><br />D:\work\depot><br /><br />D:\work\depot>ruby script/generate model LineItem<br /><br />D:\work\depot\app\models\line_item.rb<br /><pre name="code" class="ruby">
class LineItem &lt; ActiveRecord::Base
	belongs_to :product
end
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><pre name="code" class="ruby">
  def add_to_cart
  	product = Product.find(params[:id])
  	@cart = find_cart
  	@cart.add_product(product)
  	redirect_to(:action => 'display_cart')
  end
</pre><br /><br />D:\work\depot\app\models\cart.rb<br /><pre name="code" class="ruby">
class Cart
	attr_reader :items
	attr_reader :total_price
	def initialize
		@items = []
		@total_price = 0.0
	end
	def add_product(product)
		@items &lt;&lt; LineItem.for_product(product)
		@total_price += product.price
	end
end
</pre><br /><br />D:\work\depot\app\models\line_item.rb<br /><pre name="code" class="ruby">
class LineItem &lt; ActiveRecord::Base
	belongs_to :product
	def self.for_product(product)
		item = self.new
		item.quantity = 1
		item.product = product
		item.unit_price = product.price
		item
	end
end
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><pre name="code" class="ruby">
  def display_cart
  	@cart = find_cart
  	@items = @cart.items
  end
</pre><br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><pre name="code" class="ruby">
&lt;h1>Display Cart&lt;/h1>
&lt;p>
	Your cart contains &lt;%= @items.size %> items.
&lt;/p>
</pre><br /><br />D:\work\depot\app\controllers\application.rb<br /><pre name="code" class="ruby">
# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

class ApplicationController &lt; ActionController::Base
	model :cart
	model :line_item
  # Pick a unique cookie name to distinguish our session data from others'
  session :session_key => '_depot_session_id'
end
</pre><br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><br /><pre name="code" class="ruby">
&lt;h1>Display Cart&lt;/h1>
&lt;table>
&lt;% for item in @items 
		product = item.product
-%>
	&lt;tr>
		&lt;td>&lt;%= item.quantity %>&lt;/td>
		&lt;td>&lt;%= h(product.title) %>&lt;/td>
		&lt;td align="right">&lt;%= item.unit_price %>&lt;/td>
		&lt;td aling="right">&lt;%= item.unit_price * item.quantity %>&lt;/td>
	&lt;/tr>
&lt;% end -%>
&lt;table>
</pre><br /><br />D:\work\depot\app\models\cart.rb<br /><br /><pre name="code" class="ruby">
class Cart
	attr_reader :items
	attr_reader :total_price
	def initialize
		@items = []
		@total_price = 0.0
	end
	def add_product(product)
		item = @items.find {|i| i.product_id == product.id}
		if item
			item.quantity += 1
		else
			item = LineItem.for_product(product)
			@items &lt;&lt; item
		end
		@total_price += product.price
	end
end
</pre><br /><br />美化购物车<br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><br /><pre name="code" class="ruby">
&lt;div id="cartmenu">
	&lt;u1>
		&lt;li>&lt;%= link_to 'Continue shopping', :action => "index" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Empty car', :action => "empty_cart" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Checkout', :action => "checkout" %>&lt;/li>
	&lt;/u1>
&lt;/div>
&lt;table cellpadding="10" cellspacing="0">
	&lt;tr class="carttitle">
		&lt;td rowspan="2">Qty&lt;/td>
		&lt;td rowspan="2">Description&lt;/td>
		&lt;td colspan="2">Price&lt;/td>
	&lt;/tr>
	&lt;tr class="carttitle">
		&lt;td>Each&lt;/td>
		&lt;td>Total&lt;/td>
	&lt;/tr>
&lt;%
for item in @items
	product = item.product
-%>
	&lt;tr>
		&lt;td>&lt;%= item.quantity %>&lt;/td>
		&lt;td>&lt;%= h(product.title) %>&lt;/td>
		&lt;td align="right">&lt;%= item.unit_price %>&lt;/td>
		&lt;td align="right">&lt;%=item.unit_price * item.quantity %>&lt;/td>
	&lt;/tr>
&lt;% end %>
	&lt;tr>
		&lt;td colspan="3" align="right">&lt;strong>Total:&lt;/strong>&lt;/td>
		&lt;td id="totalcell">&lt;%= @cart.total_price %>&lt;/td>
	&lt;/tr>
&lt;/table>
</pre><br /><br />处理错误<br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><br /><pre name="code" class="ruby">
  def add_to_cart
  	product = Product.find(params[:id])
  	@cart = find_cart
  	@cart.add_product(product)
  	redirect_to(:action => 'display_cart')
  rescue
  	logger.error("Attempt to access invalid product #{params[:id]}")
  	flash[:notice] = 'Invalid product'
  	redirect_to(:action => 'index')
  end
</pre><br /><br />D:\work\depot\log\development.log<br /><br />D:\work\depot\app\views\layouts\store.rhtml<br /><pre name="code" class="ruby">
&lt;html>
	&lt;head>
		&lt;title>Pragprog Books Online Store&lt;/title>
		&lt;%= stylesheet_link_tag "depot", :media => "all" %>
	&lt;/head>
	&lt;body>
		&lt;div id="banner">
			&lt;img src="/images/logo.png" />
			&lt;%= @page_title || "Pragmatic Bookshelf" %>
		&lt;/div>
		&lt;div id="columns">
			&lt;div id="side">
				&lt;a href="http://www....">Home&lt;/a>&lt;br />
				&lt;a href="http://www..../faq">Questions&lt;/a>&lt;br />
				&lt;a href="http://www..../news">News&lt;/a>&lt;br />
				&lt;a href="http://www..../contact">Contact&lt;/a>&lt;br />
			&lt;/div>
			&lt;div id="main">
				&lt;% if @flash[:notice] -%>
					&lt;div id="notice">&lt;%= @flash[:notice] %>&lt;/div>
				&lt;% end -%>
				&lt;%= @content_for_layout %>
			&lt;/div>
		&lt;/div>
	&lt;/body>
&lt;/html>
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><br /><pre name="code" class="ruby">
class StoreController &lt; ApplicationController

  def index
  	@products = Product.salable_items
  end
  
  def add_to_cart
  	product = Product.find(params[:id])
  	@cart = find_cart
  	@cart.add_product(product)
  	redirect_to(:action => 'display_cart')
  rescue
  	logger.error("Attempt to access invalid product #{params[:id]}")
  	flash[:notice] = 'Invalid product'
  	redirect_to(:action => 'index')
  end
  
  def display_cart
  	@cart = find_cart
  	@items = @cart.items
  	if @items.empty?
  		flash[:notice] = "Your cart is currently empty"
  		redirect_to(:action => 'index')
  	end
  end
  
  private
  def find_cart
  	session[:cart] ||= Cart.new
  end
end
</pre><br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "Your Pragmatic Cart" -%>
&lt;div id="cartmenu">
	&lt;u1>
		&lt;li>&lt;%= link_to 'Continue shopping', :action => "index" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Empty car', :action => "empty_cart" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Checkout', :action => "checkout" %>&lt;/li>
	&lt;/u1>
&lt;/div>
&lt;table cellpadding="10" cellspacing="0">
	&lt;tr class="carttitle">
		&lt;td rowspan="2">Qty&lt;/td>
		&lt;td rowspan="2">Description&lt;/td>
		&lt;td colspan="2">Price&lt;/td>
	&lt;/tr>
	&lt;tr class="carttitle">
		&lt;td>Each&lt;/td>
		&lt;td>Total&lt;/td>
	&lt;/tr>
&lt;%
for item in @items
	product = item.product
-%>
	&lt;tr>
		&lt;td>&lt;%= item.quantity %>&lt;/td>
		&lt;td>&lt;%= h(product.title) %>&lt;/td>
		&lt;td align="right">&lt;%= item.unit_price %>&lt;/td>
		&lt;td align="right">&lt;%=item.unit_price * item.quantity %>&lt;/td>
	&lt;/tr>
&lt;% end %>
	&lt;tr>
		&lt;td colspan="3" align="right">&lt;strong>Total:&lt;/strong>&lt;/td>
		&lt;td id="totalcell">&lt;%= @cart.total_price %>&lt;/td>
	&lt;/tr>
&lt;/table>
</pre><br /><br />完成购物车<br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><pre name="code" class="ruby">
	def empty_cart
		@cart = find_cart
		@cart.empty!
		flash[:notice] = 'Your cart is now empty'
		redirect_to(:action => 'index')
	end
</pre><br /><br />D:\work\depot\app\models\cart.rb<br /><pre name="code" class="ruby">
	def empty!
		@items = []
		@total_price = 0.0
	end
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><br /><pre name="code" class="ruby">
class StoreController &lt; ApplicationController

  def index
  	@products = Product.salable_items
  end
  
  def add_to_cart
  	product = Product.find(params[:id])
  	@cart = find_cart
  	@cart.add_product(product)
  	redirect_to(:action => 'display_cart')
  rescue
  	logger.error("Attempt to access invalid product #{params[:id]}")
  	redirect_to_index(:action => 'Invalid product')
  end

	def empty_cart
		@cart = find_cart
		@cart.empty!
		redirect_to_index(:action => 'Your cart is now empty')
	end
  
  def display_cart
  	@cart = find_cart
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index('Your cart is currently empty')
  	end
  end
  
  private  
  def find_cart
  	session[:cart] ||= Cart.new
  end  
  def redirect_to_index(msg = nil)
  	flash[:notice] = msg if msg
  	redirect_to(:action => 'index')
  end
end
</pre><br /><br />D:\work\depot\app\models\cart.rb<br /><pre name="code" class="ruby">
class Cart
	attr_reader :items
	attr_reader :total_price
	def initialize
		empty!
	end
	
	def empty!
		@items = []
		@total_price = 0.0
	end
	
	def add_product(product)
		item = @items.find {|i| i.product_id == product.id}
		if item
			item.quantity += 1
		else
			item = LineItem.for_product(product)
			@items &lt;&lt; item
		end
		@total_price += product.price
	end
end
</pre><br /><br />辅助方法<br /><br />D:\work\depot\app\helpers\application_helper.rb<br /><pre name="code" class="ruby">
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
	def fmt_dollars(amt)
		sprintf("$%0.2f", amt)
	end
end
</pre><br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><pre name="code" class="ruby">
&lt;% @page_title = "Your Pragmatic Cart" -%>
&lt;div id="cartmenu">
	&lt;u1>
		&lt;li>&lt;%= link_to 'Continue shopping', :action => "index" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Empty car', :action => "empty_cart" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Checkout', :action => "checkout" %>&lt;/li>
	&lt;/u1>
&lt;/div>
&lt;table cellpadding="10" cellspacing="0">
	&lt;tr class="carttitle">
		&lt;td rowspan="2">Qty&lt;/td>
		&lt;td rowspan="2">Description&lt;/td>
		&lt;td colspan="2">Price&lt;/td>
	&lt;/tr>
	&lt;tr class="carttitle">
		&lt;td>Each&lt;/td>
		&lt;td>Total&lt;/td>
	&lt;/tr>
&lt;%
for item in @items
	product = item.product
-%>
	&lt;tr>
		&lt;td>&lt;%= item.quantity %>&lt;/td>
		&lt;td>&lt;%= h(product.title) %>&lt;/td>
		&lt;td align="right">&lt;%= fmt_dollars(item.unit_price) %>&lt;/td>
		&lt;td align="right">&lt;%= fmt_dollars(item.unit_price * item.quantity) %>&lt;/td>
	&lt;/tr>
&lt;% end %>
	&lt;tr>
		&lt;td colspan="3" align="right">&lt;strong>Total:&lt;/strong>&lt;/td>
		&lt;td id="totalcell">&lt;%= fmt_dollars(@cart.total_price) %>&lt;/td>
	&lt;/tr>
&lt;/table>
</pre><br /><br />D:\work\depot\app\views\store\index.rhtml<br /><pre name="code" class="ruby">
&lt;% for product in @products %>
	&lt;div class="catalogentry">
		&lt;img src="&lt;%= product.image_url %>"/>
		&lt;h3>&lt;%=h product.title %>&lt;/h3>
		&lt;%= product.description %>
		&lt;span class="catalogprice">&lt;%= fmt_dollars(product.price) %>&lt;/span>		
		&lt;%= link_to 'Add to Cart',
										{:action => 'add_to_cart', :id => product },
										:class => 'addtocart' %>&lt;br />
	&lt;div class="separator">&amp;nbsp;&lt;/div>
&lt;% end %>
&lt;%= link_to "Show my cart", :action => "display_cart" %>
</pre><br /><br />第九章 任务D: 结账<br /><br />D:\work\depot\db\create.sql<br /><pre name="code" class="ruby">
drop table if exists line_items;
drop table if exists orders;
drop table if exists products;

create table products (
	id							int						not null auto_increment,
	title						varchar(100)	not null,
	description			text					not null,
	image_url				varchar(200)	not null,
	price						decimal(10,2)	not null,
	date_available	datetime			not null,
	primary key(id)
);

create table orders (
	id          int           not null auto_increment,
	name			  varchar(100)  not null,
	email       varchar(255)  not null,
	address     text          not null,
	pay_type    char(10)      not null,
	primary key (id)
);

create table line_items (
	id							int							not null auto_increment,
	product_id			int							not null,
	order_id			int							not null,
	quantity				int							not null default 0,
	unit_price			decimal(10,2)		not null,
	constraint fk_items_product foreign key (product_id) references products(id),
	constraint fk_items_order foreign key (order_id) references orders(id),
	primary key (id)
);
</pre><br /><br />D:\work\depot\app\models\order.rb<br /><pre name="code" class="ruby">
class Order &lt; ActiveRecord::Base
	has_many :line_items
end
</pre><br /><br />D:\work\depot\app\models\line_item.rb<br /><pre name="code" class="ruby">
class LineItem &lt; ActiveRecord::Base
	belongs_to :product
	belongs_to :order
	def self.for_product(product)
		item = self.new
		item.quantity = 1
		item.product = product
		item.unit_price = product.price
		item
	end
end
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><pre name="code" class="ruby">
  def checkout
  	@cart = find_cart
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index("There's nothing in your cart!")
  	else
  		@order = Order.new
  	end
  end
</pre><br /><br />D:\work\depot\app\views\store\checkout.rhtml<br /><pre name="code" class="ruby">
&lt;% @page_title = "Checkout" -%>
&lt;%= start_form_tag(:action => "save_order") %>
&lt;table>
	&lt;tr>
		&lt;td>Name:&lt;/td>
		&lt;td>&lt;%= text_field("order", "name", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>EMail:&lt;/td>
		&lt;td>&lt;%= text_field("order", "email", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td>Address:&lt;/td>
		&lt;td>&lt;%= text_area("order", "address", "cols" => 40, "rows" => 5) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Pay using:&lt;/td>
		&lt;td>&lt;%=
			options = [["Select a payment option", ""]] + Order::PAYMENT_TYPES
			select("order", "pay_type", options) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;%= submit_tag(" CHECKOUT ") %>&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>		
</pre><br /><br />D:\work\depot\app\models\order.rb<br /><pre name="code" class="ruby">
class Order &lt; ActiveRecord::Base
	has_many :line_items
	
	PAYMENT_TYPES = [
		[ "Check",					"check"],
		[ "Credit Card",		"cc"],
		[ "Purchas Order",	"po"]
	].freeze  # freeze to make this array constant
end
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><pre name="code" class="ruby">
class StoreController &lt; ApplicationController

  def index
  	@products = Product.salable_items
  end
  
  def add_to_cart
  	product = Product.find(params[:id])
  	@cart = find_cart
  	@cart.add_product(product)
  	redirect_to(:action => 'display_cart')
  rescue
  	logger.error("Attempt to access invalid product #{params[:id]}")
  	redirect_to_index(:action => 'Invalid product')
  end

	def empty_cart
		@cart = find_cart
		@cart.empty!
		redirect_to_index(:action => 'Your cart is now empty')
	end
  
  def display_cart
  	@cart = find_cart
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index('Your cart is currently empty')
  	end
  end
  
  def checkout
  	@cart = find_cart
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index("There's nothing in your cart!")
  	else
  		@order = Order.new
  	end
  end
  
  def save_order
  	@cart = find_cart
  	@order = Order.new(params[:order])
  	@order.line_items &lt;&lt; @cart.items
  	if @order.save
  		@cart.empty!
  		redirect_to_index('Thank you for your order.')
  	else
  		render(:action => 'checkout')
  	end
  end
  
  private  
  def find_cart
  	session[:cart] ||= Cart.new
  end  
  def redirect_to_index(msg = nil)
  	flash[:notice] = msg if msg
  	redirect_to(:action => 'index')
  end
end
</pre><br /><br />D:\work\depot\app\models\order.rb<br /><pre name="code" class="ruby">
class Order &lt; ActiveRecord::Base
	has_many :line_items
	
	PAYMENT_TYPES = [
		[ "Check",					"check"],
		[ "Credit Card",		"cc"],
		[ "Purchas Order",	"po"]
	].freeze  # freeze to make this array constant
	
	validates_presence_of :name, :email, :address, :pay_type
	
end
</pre><br /><br />D:\work\depot\app\views\layouts\store.rhtml<br /><pre name="code" class="ruby">
&lt;html>
	&lt;head>
		&lt;title>Pragprog Books Online Store&lt;/title>
		&lt;%= stylesheet_link_tag "scaffold", "depot", :media => "all" %>
	&lt;/head>
	&lt;body>
		&lt;div id="banner">
			&lt;img src="/images/logo.png" />
			&lt;%= @page_title || "Pragmatic Bookshelf" %>
		&lt;/div>
		&lt;div id="columns">
			&lt;div id="side">
				&lt;a href="http://www....">Home&lt;/a>&lt;br />
				&lt;a href="http://www..../faq">Questions&lt;/a>&lt;br />
				&lt;a href="http://www..../news">News&lt;/a>&lt;br />
				&lt;a href="http://www..../contact">Contact&lt;/a>&lt;br />
			&lt;/div>
			&lt;div id="main">
				&lt;% if @flash[:notice] -%>
					&lt;div id="notice">&lt;%= @flash[:notice] %>&lt;/div>
				&lt;% end -%>
				&lt;%= @content_for_layout %>
			&lt;/div>
		&lt;/div>
	&lt;/body>
&lt;/html>
</pre><br /><br />mysql> select * from orders;<br />+----+------+---------------+----------------+----------+<br />| id | name | email&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | pay_type |<br />+----+------+---------------+----------------+----------+<br />|&nbsp; 3 | aaaa | bbbb@aaaa.com | aaaa bbbb cccc | cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+----+------+---------------+----------------+----------+<br />1 row in set (0.00 sec)<br /><br />mysql> select * from line_items;<br />+----+------------+----------+----------+------------+<br />| id | product_id | order_id | quantity | unit_price |<br />+----+------------+----------+----------+------------+<br />|&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29.95 |<br />|&nbsp; 2 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29.95 |<br />|&nbsp; 3 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29.95 |<br />+----+------------+----------+----------+------------+<br />3 rows in set (0.00 sec)<br /><br />迭代D2: 在付账页面显示购物车内容<br /><br />D:\work\depot\app\views\store\checkout.rhtml<br /><br /><pre name="code" class="ruby">
&lt;% @page_title = "Checkout" -%>
&lt;%= error_messages_for("order") %>
&lt;%= render_component(:acton => "display_cart") %>
&lt;%= start_form_tag(:action => "save_order") %>
&lt;table>
	&lt;tr>
		&lt;td>Name:&lt;/td>
		&lt;td>&lt;%= text_field("order", "name", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>EMail:&lt;/td>
		&lt;td>&lt;%= text_field("order", "email", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td>Address:&lt;/td>
		&lt;td>&lt;%= text_area("order", "address", "cols" => 40, "rows" => 5) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Pay using:&lt;/td>
		&lt;td>&lt;%=
			options = [["Select a payment option", ""]] + Order::PAYMENT_TYPES
			select("order", "pay_type", options) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;%= submit_tag(" CHECKOUT ") %>&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>	
</pre><br /><br /><br />D:\work\depot\app\views\store\checkout.rhtml<br /><pre name="code" class="ruby">
&lt;% @page_title = "Checkout" -%>
&lt;%= error_messages_for("order") %>
&lt;%= render_component(:acton => "display_cart",
                     :params => { :context => :checkout }) %>
&lt;%= start_form_tag(:action => "save_order") %>
&lt;table>
	&lt;tr>
		&lt;td>Name:&lt;/td>
		&lt;td>&lt;%= text_field("order", "name", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>EMail:&lt;/td>
		&lt;td>&lt;%= text_field("order", "email", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td>Address:&lt;/td>
		&lt;td>&lt;%= text_area("order", "address", "cols" => 40, "rows" => 5) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Pay using:&lt;/td>
		&lt;td>&lt;%=
			options = [["Select a payment option", ""]] + Order::PAYMENT_TYPES
			select("order", "pay_type", options) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;%= submit_tag(" CHECKOUT ") %>&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>	
</pre><br /><br />D:\work\depot\app\controllers\store_controller.rb<br /><br />修改如下方法：<br /><pre name="code" class="ruby">
  def display_cart
  	@cart = find_cart
  	@items = @cart.items
  	if @items.empty?
  		redirect_to_index('Your cart is currently empty')
  	end
  	if params[:context] == :checkout
  		render(:layout => false )
  	end
  end
</pre><br /><br />D:\work\depot\app\views\store\display_cart.rhtml<br /><pre name="code" class="ruby">
&lt;% @page_title = "Your Pragmatic Cart" -%>
&lt;div id="cartmenu">
	&lt;u1>
		&lt;li>&lt;%= link_to 'Continue shopping', :action => "index" %>&lt;/li>
		&lt;% unless params[:context] == :checkout -%>
		&lt;li>&lt;%= link_to 'Empty car', :action => "empty_cart" %>&lt;/li>
		&lt;li>&lt;%= link_to 'Checkout', :action => "checkout" %>&lt;/li>
		&lt;% end -%>
	&lt;/u1>
&lt;/div>
&lt;table cellpadding="10" cellspacing="0">
	&lt;tr class="carttitle">
		&lt;td rowspan="2">Qty&lt;/td>
		&lt;td rowspan="2">Description&lt;/td>
		&lt;td colspan="2">Price&lt;/td>
	&lt;/tr>
	&lt;tr class="carttitle">
		&lt;td>Each&lt;/td>
		&lt;td>Total&lt;/td>
	&lt;/tr>
&lt;%
for item in @items
	product = item.product
-%>
	&lt;tr>
		&lt;td>&lt;%= item.quantity %>&lt;/td>
		&lt;td>&lt;%= h(product.title) %>&lt;/td>
		&lt;td align="right">&lt;%= fmt_dollars(item.unit_price) %>&lt;/td>
		&lt;td align="right">&lt;%= fmt_dollars(item.unit_price * item.quantity) %>&lt;/td>
	&lt;/tr>
&lt;% end %>
	&lt;tr>
		&lt;td colspan="3" align="right">&lt;strong>Total:&lt;/strong>&lt;/td>
		&lt;td id="totalcell">&lt;%= fmt_dollars(@cart.total_price) %>&lt;/td>
	&lt;/tr>
&lt;/table>
</pre><br /><br />D:\work\depot\app\views\store\checkout.rhtml<br /><pre name="code" class="ruby">
&lt;% @page_title = "Checkout" -%>
&lt;%= error_messages_for("order") %>
&lt;%= render_component(:acton => "display_cart",
                     :params => { :context => :checkout }) %>
&lt;h3>Please enter your details below&lt;/h3>
&lt;%= start_form_tag(:action => "save_order") %>
&lt;table>
	&lt;tr>
		&lt;td>Name:&lt;/td>
		&lt;td>&lt;%= text_field("order", "name", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>EMail:&lt;/td>
		&lt;td>&lt;%= text_field("order", "email", "size" => 40) %>&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td>Address:&lt;/td>
		&lt;td>&lt;%= text_area("order", "address", "cols" => 40, "rows" => 5) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>Pay using:&lt;/td>
		&lt;td>&lt;%=
			options = [["Select a payment option", ""]] + Order::PAYMENT_TYPES
			select("order", "pay_type", options) %>&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;/td>
		&lt;td>&lt;%= submit_tag(" CHECKOUT ") %>&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;%= end_form_tag %>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/163315#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Feb 2008 12:37:09 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/163315</link>
        <guid>http://xjh.javaeye.com/blog/163315</guid>
      </item>
          <item>
        <title>rails demo</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/162140" style="color:red;">http://xjh.javaeye.com/blog/162140</a>&nbsp;
          发表时间: 2008年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          d:\>mkdir work<br /><br />d:\>cd work<br /><br />d:\work>rails demo<br /><br />d:\work>cd demo<br /><br />d:\work\demo>ruby script/server (启动服务)<br /><br />d:\work\demo>ruby script/generate controller say<br /><br />say_controller.rb<br /><br /><pre name="code" class="ruby">
class SayController &lt; ApplicationController
	def hello
		@time = Time.new
	end
	
	def goodbye
	end
end
</pre><br /><br />hello.rhtml<br /><br /><pre name="code" class="ruby">
&lt;html>
&lt;head>
	&lt;title>Hello Rails!&lt;/title>
&lt;/head>
&lt;body>
	&lt;h1>Hello Rails!&lt;/h1>
	&lt;p>It is now:  [&lt;%= Time.new %>]&lt;/p>
	&lt;p>It is now2: [&lt;%=@time%>]&lt;/p>
	&lt;p>Say  &lt;a href="/say/goodbye">GoodBye!&lt;/a>
	&lt;br />
	&lt;p>Time to Say &lt;%= link_to "GoodBye!", :action => "goodbye" %>&lt;/p>
	&lt;p>
	&lt;% 5.times do %>
	HO! &lt;br />
	&lt;% end %>
	Merry Christmas!
	&lt;/p>
	&lt;ul>
		&lt;li>Addition: &lt;%= 1 + 2 %>&lt;/li>
		&lt;li>Concatenation: &lt;%= "cow" + "boy" %>&lt;/li>
		&lt;li>Time in one hour: &lt;%= 1.hour.from_now %>&lt;/li>
	&lt;/ul>
&lt;/body>
&lt;/html>
</pre><br /><br />goodbye.rhtml<br /><br /><pre name="code" class="ruby">
&lt;html>
&lt;head>
	&lt;title>Goodbye Rails!&lt;/title>
&lt;/head>
&lt;body>
	&lt;h1>GoodBye Rails!&lt;/h1>
	&lt;p>Say  &lt;a href="/say/hello">Hello&lt;/a>&lt;/p>
	&lt;br />
	&lt;p>Time to Say &lt;%= link_to "Hello!", :action => "hello" %>&lt;/p>
&lt;/body>
&lt;/html>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/162140#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Feb 2008 22:38:53 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/162140</link>
        <guid>http://xjh.javaeye.com/blog/162140</guid>
      </item>
          <item>
        <title>rails 启动两个 script/server 报的错误</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/162127" style="color:red;">http://xjh.javaeye.com/blog/162127</a>&nbsp;
          发表时间: 2008年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          E:\work\Depot>ruby script/server<br />./script/../config/boot.rb:65:Warning: require_gem is obsolete.&nbsp; Use gem instead<br />.<br />=> Booting WEBrick...<br />=> Rails application started on http://0.0.0.0:3000<br />=> Ctrl-C to shutdown server; call with --help for options<br />[2008-02-13 21:28:57] INFO&nbsp; WEBrick 1.3.1<br />[2008-02-13 21:28:57] INFO&nbsp; ruby 1.8.6 (2007-09-24) [i386-mswin32]<br />[2008-02-13 21:28:57] WARN&nbsp; TCPServer Error: 通常每个套接字地址(协议/网络地址/端<br />口)只允许使用一次。 - bind(2)<br />d:/ruby/lib/ruby/1.8/webrick/utils.rb:73:in `initialize': 通常每个套接字地址(协<br />议/网络地址/端口)只允许使用一次。 - bind(2) (Errno::EADDRINUSE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/utils.rb:73:in `new'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/utils.rb:73:in `create_listeners'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/utils.rb:70:in `each'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/utils.rb:70:in `create_listeners'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/server.rb:75:in `listen'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/server.rb:63:in `initialize'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/1.8/webrick/httpserver.rb:24:in `initialize'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb:58<br />:in `new'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... 10 levels...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_suppo<br />rt/dependencies.rb:495:in `require'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_suppo<br />rt/dependencies.rb:342:in `new_constants_in'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_suppo<br />rt/dependencies.rb:495:in `require'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from script/server:3<br /><br />E:\work\Depot>
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/162127#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Feb 2008 21:34:02 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/162127</link>
        <guid>http://xjh.javaeye.com/blog/162127</guid>
      </item>
          <item>
        <title>rails 的版本问题</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/161973" style="color:red;">http://xjh.javaeye.com/blog/161973</a>&nbsp;
          发表时间: 2008年02月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          D:\work\depot>ruby script/server<br />Cannot find gem for Rails =1.2.6.0:<br />&nbsp;&nbsp;&nbsp; Install the missing gem with 'gem install -v=1.2.6 rails', or<br />&nbsp;&nbsp;&nbsp; change environment.rb to define RAILS_GEM_VERSION with your desired version.
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/161973#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Feb 2008 21:17:36 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/161973</link>
        <guid>http://xjh.javaeye.com/blog/161973</guid>
      </item>
          <item>
        <title>请问深圳的准生证在哪办理？</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/161218" style="color:red;">http://xjh.javaeye.com/blog/161218</a>&nbsp;
          发表时间: 2008年02月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          户口所在地开初婚未育的证明,拿上这个证明到居住地所属社区盖章,<br />再到街道办事处计生办盖章,以上步骤盖三个章就算是把你的初婚未育证明了,<br />然后再带双方身份证、户口本、结婚证、结婚证上贴的一样的照片2张去女方户口所在地的计划生育办公室办理，比较好办理，<br />当场即可拿证，不收费；<br />我们这里的政策是出生前出生后都可以办理的，<br />具体期限你可以打电话先和计生办的联系好。
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/161218#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Feb 2008 17:27:43 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/161218</link>
        <guid>http://xjh.javaeye.com/blog/161218</guid>
      </item>
          <item>
        <title>2006年深圳随迁入户须知(转)</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/160599" style="color:red;">http://xjh.javaeye.com/blog/160599</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          来源: <br />http://zhidao.baidu.com/question/5323765.html?fr=qrl<br /><br />2006年深圳随迁入户须知 <br /><br /><br />一、夫妻随迁入户 <br />（一）须符合下列条件 <br />1、夫妻分居满两年； <br />2、申请随迁人员必须是无业人员，不属在职干部、职工； <br />3、未违反计划生育政策。 <br />（二）须如实填写《入户申请审批表》，提供下列材料原件和复印件（A4纸） <br />1、结婚证； <br />2、双方户口簿和身份证； <br />3、拟迁入地街道办事处计划生育部门出具的计划生育证明； <br />4、申请人属非农业（居民）户口的，提供户口所在地镇或街道办事处当年出具的无业证明； <br />5、夫妻随迁同时携带未成年子女的，需提供子女户口簿、出生医学证明。 <br />二、老人随子女入户 <br />（一）须符合下列条件 <br />1、男年满60周岁，女年满55周岁，必须双方同时符合条件一并提出申请； <br />2、老人身边无子女。 <br />（二）须如实填写《入户申请审批表》，提供下列材料原件和复印件（A4纸） <br />1、老人及所投靠子女双方户口簿和身份证； <br />2、老人户口所在地派出所出具的子女情况和双方关系证明； <br />3、老人或被投靠人在深圳的房产证明。 <br />三、子女随父母入户 <br />（一）须符合下列条件 <br />1、未成年子女（含成年子女仍在普通中学就读的学生）； <br />2、父母双方或一方已是本市常住户口居民； <br />3、未违反计划生育政策。 <br />（二）须如实填写《入户申请审批表》，提供下列材料原件和复印件（A4纸） <br />1、子女出生医学证明、户口簿； <br />2、父母结婚证、身份证、户口簿； <br />3、拟迁入地街道办事处计划生育部门出具的计划生育证明； <br />4、父或母迁入深圳时的批准证明材料； <br />5、超过十八周岁的成年子女，须提交在校证明。 <br />四、申请程序 <br />由申请人向拟入户地所在公安分局人口管理科提出申请。市公安局人口管理处根据市政府下达的当年入户指标数统一排队候批。 <br /><br />深圳市公安局人口管理处
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/160599#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 20:48:48 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/160599</link>
        <guid>http://xjh.javaeye.com/blog/160599</guid>
      </item>
          <item>
        <title>DB2中文版控制中心显示不正常</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/158187" style="color:red;">http://xjh.javaeye.com/blog/158187</a>&nbsp;
          发表时间: 2008年01月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          DB2中文版控制中心显示不正常<br /><br />环境&nbsp; [产品] DB2 UDB<br /> [平台] Windows<br /> [版本] 7.x <br />问题&nbsp; DB2中文版控制中心显示不正常 <br />解答 如果在简体中文下发现控制中心显示不正常，修改下DB2文件：<br />"&lt;sqllib>\java\java12\jdk\jre\lib\font.properties.zh"<br />将"filename.\u5b8b\u4f53=simsun.ttf" 替换为 "filename.\u5b8b\u4f53=simsun.ttc" 。<br /><br />&lt;sqllib>是指DB2的安装目录，如C:\Program Files\SQLLIB
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/158187#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jan 2008 00:09:11 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/158187</link>
        <guid>http://xjh.javaeye.com/blog/158187</guid>
      </item>
          <item>
        <title>各银行的网站</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/155365" style="color:red;">http://xjh.javaeye.com/blog/155365</a>&nbsp;
          发表时间: 2008年01月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          中国工商银行中国网站<br />http://www.icbc.com.cn/index.jsp<br /><br />招商银行<br />http://www.cmbchina.com/<br /><br />交通银行<br />http://www.bankcomm.com/jh/cn/index.html<br /><br />中国银行<br />http://www.boc.cn/cn/static/index.html<br /><br />中国建设银行<br />http://www.ccb.com/portal/cn/home/index.html<br /><br />中国农业银行<br />http://www.abchina.com/cn/hq/index.jsp/lang=cn/index.html
          <br/><br/>
          <span style="color:red;">
            <a href="http://xjh.javaeye.com/blog/155365#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 13 Jan 2008 10:13:55 +0800</pubDate>
        <link>http://xjh.javaeye.com/blog/155365</link>
        <guid>http://xjh.javaeye.com/blog/155365</guid>
      </item>
          <item>
        <title>用 rails 新建一个应用程序</title>
        <author>xiejiaohui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xjh.javaeye.com">xiejiaohui</a>&nbsp;
                    链接：<a href="http://xjh.javaeye.com/blog/150224" style="color:red;">http://xjh.javaeye.com/blog/150224</a>&nbsp;
          发表时间: 2007年12月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客