<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>woaigithub</title>
    <link>https://ruby-china.org/woaigithub</link>
    <description>我在参加51cto的博客大赛，觉得内容不错就帮我投投票，谢谢了！ 投票地址：http://blog.51cto.com/contest2012/115214</description>
    <language>en-us</language>
    <item>
      <title>本人现在北京，想找一个对眼上的上司，具体工作内容没有要求，合理合法就行</title>
      <description>&lt;p&gt;本人现在北京，求一份工作，具体工作内容没有要求，合理合法就行。
可以看看我在这里的文章，或者是打开我的博客&lt;a href="http://virusswb.blog.51cto.com" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com&lt;/a&gt;，里面都是我的一些总结和心得。相信你在看了之后，对我会有一点想法的。
如果看对上眼了，我们可以聊一聊，先电话聊聊，如果合适，我们再见面聊聊，见面聊聊也觉得不错，就试用一下，试用不错，那就正式合作。
&lt;strong&gt;本人 QQ1472364723&lt;/strong&gt;&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Sun, 08 Dec 2013 15:23:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/16062</link>
      <guid>https://ruby-china.org/topics/16062</guid>
    </item>
    <item>
      <title>有想回包头创业的家乡人吗？</title>
      <description>&lt;p&gt;有想回包头创业的家乡人吗？&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Thu, 05 Sep 2013 09:42:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/13893</link>
      <guid>https://ruby-china.org/topics/13893</guid>
    </item>
    <item>
      <title>自己的孩子，大家多提意见！</title>
      <description>&lt;p&gt;&lt;a href="http://www.dasinong.com/ap/index.shtml" rel="nofollow" target="_blank"&gt;http://www.dasinong.com/ap/index.shtml&lt;/a&gt;
自己的孩子，大家多提意见！
谢谢！！！！
安全放心健康农产品！！&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Tue, 18 Jun 2013 09:04:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/11797</link>
      <guid>https://ruby-china.org/topics/11797</guid>
    </item>
    <item>
      <title> 为什么我的 VM 虚拟机开发很卡，有什么调优的手段吗？</title>
      <description>&lt;p&gt;为什么我的 VM 虚拟机开发很卡，有什么调优的手段吗？
谢谢！&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Mon, 08 Apr 2013 08:51:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/10016</link>
      <guid>https://ruby-china.org/topics/10016</guid>
    </item>
    <item>
      <title>用户管理架构设计</title>
      <description>&lt;p&gt;今天给大家分享的是：用户管理模块&lt;/p&gt;

&lt;p&gt;或者说用户管理子系统如何设计，包括如何抽象以及相关的存储。&lt;/p&gt;

&lt;p&gt;大部分的应用中都会有用户的概念，除非你的网站全部是匿名访问，不保存用户任何信息。其实这也是不好的，因为你的网站如果没有用户的概念，没有设计用户模块，就很难收集用户信息及用户行为，也就很难有数据来分析用户的喜好，也就少了一条给用户提供更好服务的途径。&lt;/p&gt;

&lt;p&gt;现在是 web2.0 的时代，甚至是 web3.0，用户越来越在意网站给自己带来的内容，显示的内容是否合适自己，而且用户很想参与网站的内容构建，想要对自己构建的内容进行聚合、管理。&lt;/p&gt;

&lt;p&gt;说了这么多，就是要说明用户管理模块很重要，是个应用就应该考虑，而且还是重中之重。&lt;/p&gt;

&lt;p&gt;先来看一下用户信息都包含哪些内容。&lt;/p&gt;

&lt;p&gt;常见的内容包括：登录账号，登录密码，电子邮箱，个人网址，手机，QQ，简介，标签等等。&lt;/p&gt;

&lt;p&gt;用户还可能包括企业用户，就会有：企业名称，企业注册号，企业工商号，企业营业执照号，法人，联系人，联系人职务等等企业信息。&lt;/p&gt;

&lt;p&gt;如果是涉及到金钱往来的应用，例如：电商网站。肯定还会有银行账户信息：开户银行名称，开户名称，开户账号等。&lt;/p&gt;

&lt;p&gt;用户会有很多的类型。&lt;/p&gt;

&lt;p&gt;有的是个人，有的是企业。&lt;/p&gt;

&lt;p&gt;有的有银行账户信息，有的没有银行账户信息，现在没有的，以后可能会有。&lt;/p&gt;

&lt;p&gt;在用户认证方面现在可能是 username/password，以后可能需要支持第三方认证（例如：微博，twitter，qq），还可能需要 SSO。&lt;/p&gt;

&lt;p&gt;更多请看。。。
&lt;a href="http://virusswb.blog.51cto.com/115214/1111442" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/115214/1111442&lt;/a&gt;&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Tue, 08 Jan 2013 12:11:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/7867</link>
      <guid>https://ruby-china.org/topics/7867</guid>
    </item>
    <item>
      <title>enable your site support mobile</title>
      <description>&lt;p&gt;A Better Way to Add Mobile Pages to a Rails Site
&lt;a href="http://scottwb.com/blog/2012/02/23/a-better-way-to-add-mobile-pages-to-a-rails-site/" rel="nofollow" target="_blank"&gt;http://scottwb.com/blog/2012/02/23/a-better-way-to-add-mobile-pages-to-a-rails-site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mobile Devices and Rails: Maintaining your Sanity
&lt;a href="http://erniemiller.org/2011/01/05/mobile-devices-and-rails-maintaining-your-sanity/" rel="nofollow" target="_blank"&gt;http://erniemiller.org/2011/01/05/mobile-devices-and-rails-maintaining-your-sanity/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;useragent
&lt;a href="https://github.com/josh/useragent" rel="nofollow" target="_blank"&gt;https://github.com/josh/useragent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mobile Devices
&lt;a href="http://railscasts.com/episodes/199-mobile-devices?view=asciicast" rel="nofollow" target="_blank"&gt;http://railscasts.com/episodes/199-mobile-devices?view=asciicast&lt;/a&gt;&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Wed, 12 Dec 2012 22:01:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/7506</link>
      <guid>https://ruby-china.org/topics/7506</guid>
    </item>
    <item>
      <title>一个小点子，大家帮忙看看，有兴趣的单聊</title>
      <description>&lt;p&gt;工作 1-3 年，少走弯路。其实也是结合自己的成长历程想出来的。
这一年有很深的感触，如果自己在工作的初期，可以有一些明确的指导，或者说有见解的人的带动，自己可以少走很多弯路，可以走的更快。虽然说个人的努力与勤奋是必须的，不能等着别人来帮助你，但是如果有人在你努力的同时帮助你，哪怕是指导你一下，你也会走的更好。
虽然说弯路使人成长，使人成熟，但是有些弯路其实可以避免，甚至有些弯路需要避免，没有必要走一走。&lt;/p&gt;

&lt;p&gt;甚至夸大点说，少走弯路，可以集中精力做更多的事情，做更多想做的事情，更大的发挥个人的潜力。&lt;/p&gt;

&lt;p&gt;增加团队凝聚力。
缩短新人的磨合期。
让新人尽快进入角色。
团队培训。&lt;/p&gt;

&lt;p&gt;相似的公司，相似的业务
培训公司，北大青鸟这类 it 培训公司。
提供的主要服务是 it 培训，主要是软件开发方面的 it 培训。有 java，.NET，android，软件测试这些类型的培训。
主要的流程是，首先通过广告宣传，将社会上有 it 培训需求的人，例如学生，想要走入软件开发行业的人，想要系统提升软件开发技能的人。让这些人交费，报名，然后组成班，由授课老师讲授课程，学生听课，开班授课的形式。还有一些延伸的服务，就是就业方面的双向牵头，因为做的时间长，名气大，也有一定实力，而且有针对性的，所有会吸引一部分的企业来招人，给自己的学生提供一个就业的平台。甚至在招生的时候，就可以打出这样的牌子，包就业，包就业多少多少钱啊。有周末班，也有日常班。&lt;/p&gt;

&lt;p&gt;他们的成熟度高，系统性强，有一定的知名度，有一定的认可度。甚至有的还有自己的认证体系。
但是缺乏个性，有点程式化，不能针对学员的需要进行调整，大多只是硬技能的培训教授，缺乏软技能教授。久而久之，难免有填鸭式的嫌疑。而且时间偏长，三个月，五个月，一年，甚至更多，其实时间长并不代表效果好。时间拉长之后，人可能会疲乏，不能集中精力，容易懈怠，会有些浪费。其实很多时候不需要这么长时间。&lt;/p&gt;

&lt;p&gt;我想做的一种形式是。主要针对工作 1-3 年的，而且不是针对个人，而且针对公司，公司的新人，从软件开发技能到做事方式，到思考方式，甚至人生方向，全方位的教授。
主要的客户就是软件公司，或者是有软件发开团队的公司，对公司的新人进行培训。主要教授的技能不是有多么深，什么搜索啊，算法啊，数据结构啊，这些不是主要培训内容，主要是流程，思考，正确的开发过程，或者说高效的开发过程，或者说流畅的开发过程，或者说流畅的开发体验，包括开发，包括测试。
时间尽量控制在一个月，而且不需要全日制，也不需要周末时间，就是日常，尽量结合客户的环境，驻厂式的跟进。
收费不高，针对公司收费，多种收费方式，一次性收费，按次收费，按效果收费，分期收费。&lt;/p&gt;

&lt;p&gt;还有一个相似的业务就是大公司的内部培训部门。
有一些大公司内部已经存在专职的培训部门，有自己的积累，这个我觉得初期不作为考虑的客户，因为没有实力，没有认知度，没有知名度，很难进入。但是，如果有将来，肯定会争取外包他们的培训部门。他们自己养培训部门，其实没有太多收益，首先是人员浪费，没有太多实际产出，而且时间长了，容易流于形式，走过场，起到的效果不强。&lt;/p&gt;

&lt;p&gt;其实大班授课，交钱的人多，压低了成本，可以挣到钱。
小班，就只能高收费，否则一个老师四个学生，和一个老师四十个学生是不一样的，四十个学生四十份钱，四个学生四份钱。一个学生收十份的钱，肯定是不可能的，这样客户肯定没有办法接受，但是收 2-3 份的钱估计还可以考虑。
比如说，客户有一个四个人的团队，需要接受培训。一个月，一万，每周 2-3 次，每次 2 个小时。每个月需要 50 个小时，200 元每小时。&lt;/p&gt;

&lt;p&gt;需要做的工作，以及可能碰到的困难：
如何在短时间讲出精彩的内容，结合公司的场景，简练的语言，通俗易懂的表述。
自己要有一套开发流程，最好是经过验证的开发流程。
让小公司的老板掏钱培训员工，首先他们不认为这是他们该做的，其次他们怕员工意识上去了留不住。
针对他们不认为这是他们该做的这个想法，可以告诉他们，掏小钱，半大事，收益的回报绝对比培训费用多得多。
针对怕员工意识上去了留不住这个想法，可以告诉他们，员工成熟了，企业发展就更迅速，可以集中精力做更有价值的事，发展壮大了，害怕员工留不住吗！&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Mon, 10 Dec 2012 09:00:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/7424</link>
      <guid>https://ruby-china.org/topics/7424</guid>
    </item>
    <item>
      <title>利用流水线改进代码中的 if 处理流程</title>
      <description>&lt;p&gt;原文地址
&lt;a href="http://virusswb.blog.51cto.com/115214/1081790" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/115214/1081790&lt;/a&gt;
欢迎大家浏览讨论，留言，拍砖，请踊跃拍砖！！&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Fri, 07 Dec 2012 15:52:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/7392</link>
      <guid>https://ruby-china.org/topics/7392</guid>
    </item>
    <item>
      <title>由小数的精度问题引出设计问题</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
irb(main):025:0&amp;gt; 1.9+18.99
=&amp;gt; 20.889999999999997

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种小数如何控制精度呢？我想要的结果是 20.89！如何才能得到呢？&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Thu, 06 Dec 2012 22:42:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/7376</link>
      <guid>https://ruby-china.org/topics/7376</guid>
    </item>
    <item>
      <title>带射击游戏的小便器</title>
      <description>&lt;p&gt;前段时间看国外有一种小便器，可以解决人们总是把小便弄到外面的问题。&lt;/p&gt;

&lt;p&gt;就是利用人性，喜欢射击，然后在小便器中间搞一个小洞，或者是苍蝇之类的东西，然后人们就会不自觉的向它开炮，这样就会减少小便到外面的几率，而且据统计，效果很好。&lt;/p&gt;

&lt;p&gt;我有一个更劲爆的，苍蝇太没有意思了。
直接设计一个射击游戏，还带上通关的，而且数据还联网，在不同的厕所可以继续上一次的成绩，还可以搞一个社区，晒晒大家的成绩。
不仅可以解决小便到外面的问题，还可以解决随地小便的问题。因为好玩，所以都愿意去厕所小便。&lt;/p&gt;

&lt;p&gt;不过这里面最大的难度是游戏的设计，因为小便的时间也就是 90 秒 -180 秒左右，时间比较短，怎么样才能吸引人，是很关键的。&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Thu, 06 Dec 2012 16:22:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/7368</link>
      <guid>https://ruby-china.org/topics/7368</guid>
    </item>
    <item>
      <title>[管理员请进] 增加创意节点</title>
      <description>&lt;p&gt;我觉得我们社区应该增加一个创意节点，大家可以提出各种创意，讨论各种创意，没准哪天就一起实现创意了。
同意的话，大家一起顶啊！！！！！&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Thu, 06 Dec 2012 16:17:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/7367</link>
      <guid>https://ruby-china.org/topics/7367</guid>
    </item>
    <item>
      <title>终于入了一点点的测试门道</title>
      <description>&lt;p&gt;以前用.NET 开发的时候，一直都想引入测试，测试验证啊，测试流程啊，甚至是集成测试，但是就是不知道如何入门，照着例子写完了，可是一到自己的项目，就是不知道如何入手，从哪里开始，涉及数据库的应该怎么办，所以很久都没有办法在项目中使用。&lt;/p&gt;

&lt;p&gt;自从接触了 rails，接触了 rails 的测试，单元测试，功能测试，集成测试，很清晰，一路下来，感觉有点入门了，而且也知道自己的项目该如何做了。&lt;/p&gt;

&lt;p&gt;知道该测哪些内容，如何开始，测试所需要的数据该如何处理，涉及数据库的该如何处理，并且还有了自己的一点想法。&lt;/p&gt;

&lt;p&gt;关于测试的头脑风暴
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1076949" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1076949&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rails 测试《一》fixtures 简介
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1075385" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1075385&lt;/a&gt;
.
.
.
Rails 测试《九》集成测试 integration test
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1079120" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1079120&lt;/a&gt;&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Wed, 05 Dec 2012 14:21:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/7328</link>
      <guid>https://ruby-china.org/topics/7328</guid>
    </item>
    <item>
      <title>现在的浏览器还真是吓人啊，看看我的截图吧。</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/689d5668c245789ffc3b8282a76d4aa8.png" title="" alt=""&gt;
在 windows 上我打开三个浏览器，都是空白页，没有设置首页。
然后打开任务管理器，转到进程 tab。
在进程列表中
chrome 有 7 个启动的进程，总共占用内存 140M 左右。
firefox 有一个启动的进程，占用内存 140M 左右。
ie 有两个启动的进程，占用内存 60M 左右。&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Wed, 05 Dec 2012 09:53:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/7320</link>
      <guid>https://ruby-china.org/topics/7320</guid>
    </item>
    <item>
      <title>关于一个想法的意见反馈</title>
      <description>&lt;p&gt;不知道大家有没有这么一种需求。就是想把一些内容同时发布在自己的各个博客，或者说各个微博，或者说各个媒体吧。
就是写一次，然后选择想要发布到的媒体，然后一下子这些媒体都会出现自己的发言。
而不用一个一个的登录，一个一个的粘贴，一个一个的点击保存按钮。&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Wed, 05 Dec 2012 09:05:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/7317</link>
      <guid>https://ruby-china.org/topics/7317</guid>
    </item>
    <item>
      <title>[提问] 功能测试中的一个迷惑</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_should_create_post_successfully&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;FactoryGirl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:user_valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;FactoryGirl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:category_valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;#@request.session[:user_id] = user.id&lt;/span&gt;
    &lt;span class="n"&gt;assert_difference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Post.count'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;

      &lt;span class="n"&gt;article&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;FactoryGirl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:post_valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

      &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="ss"&gt;:create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:post&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:category_id&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="ss"&gt;:slug&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="ss"&gt;:summary&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="ss"&gt;:content&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;content&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:user_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="c1"&gt;#assert_redirected_to admin_posts_path(assigns(:posts))&lt;/span&gt;

  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面是我的功能测试代码，针对 postscontroller 的 create。
controller 中的代码是这样的。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;
  &lt;span class="vi"&gt;@category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:post&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:category_id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

  &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:post&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:category_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@category.posts.build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:post&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="vi"&gt;@post.user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current_user&lt;/span&gt;
  &lt;span class="vi"&gt;@post.tag_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:tag_ids&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@post.save&lt;/span&gt;
    &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:notice&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"post was created successfully"&lt;/span&gt;
    &lt;span class="n"&gt;redirect_to&lt;/span&gt; &lt;span class="n"&gt;admin_posts_path&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:notice&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"create post failed"&lt;/span&gt;
    &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;:new&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create 成功之后会跳转，我在 chrome 的 developer tools 下面看到的也是一个 302，然后才是 200.
但是我的测试却提示我测试失败。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test_should_create_post_successfully(Admin::PostsControllerTest) [test/functional/admin/posts_controller_test.rb:22]:
Expected response to be a &amp;lt;:redirect&amp;gt;, but was &amp;lt;200&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>woaigithub</author>
      <pubDate>Tue, 04 Dec 2012 14:18:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/7291</link>
      <guid>https://ruby-china.org/topics/7291</guid>
    </item>
    <item>
      <title>从 rails 自带的测试学起，边学边写笔记</title>
      <description>&lt;p&gt;从 rails 自带的测试学起，边学边写笔记，factory-girl 很好用，用来替代 fixtures，是一个很不错的选择。
Rails 测试《一》fixtures 简介
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1075385" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1075385&lt;/a&gt;
Rails 测试《二》单元测试 unit test
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1075391" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1075391&lt;/a&gt;
Rails 测试《三》功能测试 functional test
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1075409" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1075409&lt;/a&gt;
Rails 测试《四》实战单元测试 unit test
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1075602" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1075602&lt;/a&gt;
Rails 测试《五》实战单元测试 - 用 factory-girl 替换 fixtures 来创建模拟数据
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1076069" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1076069&lt;/a&gt;
Rails 测试《六》实战单元测试 - 用 factory-girl 替换 fixtures 来创建模拟数据 2
&lt;a href="http://virusswb.blog.51cto.com/blog/115214/1076695" rel="nofollow" target="_blank"&gt;http://virusswb.blog.51cto.com/blog/115214/1076695&lt;/a&gt;&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Sun, 02 Dec 2012 22:46:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/7259</link>
      <guid>https://ruby-china.org/topics/7259</guid>
    </item>
    <item>
      <title>麻烦推荐一款好用的视频录制工具</title>
      <description>&lt;p&gt;麻烦推荐一款好用的视频录制工具，刚才找了几个，发现录制的效果不太好，不清晰啊。&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Sat, 01 Dec 2012 08:57:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/7238</link>
      <guid>https://ruby-china.org/topics/7238</guid>
    </item>
    <item>
      <title>在线 regex 编辑器</title>
      <description>&lt;p&gt;&lt;a href="http://rubular.com/" rel="nofollow" target="_blank"&gt;http://rubular.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;a Ruby regular expression editor&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Thu, 22 Nov 2012 17:05:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/7006</link>
      <guid>https://ruby-china.org/topics/7006</guid>
    </item>
    <item>
      <title>  更新用户信息的时候取消对于密码的验证</title>
      <description>&lt;p&gt;更新用户信息的时候取消对于密码的验证&lt;/p&gt;

&lt;p&gt;假设有下面的 model&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="n"&gt;attr_accessible&lt;/span&gt; &lt;span class="ss"&gt;:username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:password&lt;/span&gt;

  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:presence&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;validates 用来在注册的时候验证密码。&lt;/p&gt;

&lt;p&gt;但是用户修改个人信息的时候，我们一般不同时修改密码，用户可以修改密码意外的其他字段，修改页面也没有密码字段。
修改密码是另外独立的一个功能。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="vi"&gt;@user.update_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会验证所有的 validates，所以会提示密码不能为空。但是这时候我们不想出现这个提示。&lt;/p&gt;

&lt;p&gt;下面这段代码只会更新 email 和 username&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="vi"&gt;@user.email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="vi"&gt;@user.username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:username&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@user.update_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:username&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
      &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:notice&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"update user successful"&lt;/span&gt;
      &lt;span class="n"&gt;redirect_to&lt;/span&gt; &lt;span class="vi"&gt;@user&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:notice&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"update user fail"&lt;/span&gt;
      &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;:edit&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是也有遗憾，update_attribute 会 skip_validate，也就是说验证不起作用了，不知道大家碰到这个问题有没有好的解决办法。&lt;/p&gt;

&lt;p&gt;devise 里面有一个方法
update_without_password(params[:user])
可以在更新的时候跳过 password 字段。&lt;/p&gt;

&lt;p&gt;参考文档：&lt;/p&gt;

&lt;p&gt;How To: Allow users to edit their account without providing a password&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-account-without-providing-a-password" rel="nofollow" target="_blank"&gt;https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-account-without-providing-a-password&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/7083575/updating-user-attributes-without-requiring-password" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/7083575/updating-user-attributes-without-requiring-password&lt;/a&gt;&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Tue, 13 Nov 2012 12:02:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/6719</link>
      <guid>https://ruby-china.org/topics/6719</guid>
    </item>
    <item>
      <title>bootstrap 中的 dropmenu 有时候会不好用，请问有哪些可能呢？</title>
      <description>&lt;p&gt;bootstrap 中的 dropmenu 有时候会不好用，出不来下拉的效果，请问有哪些可能呢？&lt;/p&gt;</description>
      <author>woaigithub</author>
      <pubDate>Mon, 12 Nov 2012 13:15:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/6695</link>
      <guid>https://ruby-china.org/topics/6695</guid>
    </item>
  </channel>
</rss>
