<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>alex (Alex)</title>
    <link>https://ruby-china.org/alex</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>Jeff Atwood 的新项目，开源论坛 Discourse</title>
      <description>&lt;p&gt;&lt;a href="http://www.discourse.org/" rel="nofollow" target="_blank"&gt;http://www.discourse.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on Ruby on Rails and Ember.js
PostgreSQL as data store 
Redis for job queue, rate limiting, as a cache and for transient data&lt;/p&gt;

&lt;p&gt;GPL 2.0 License&lt;/p&gt;

&lt;p&gt;Github 地址楼下给了&lt;/p&gt;</description>
      <author>alex</author>
      <pubDate>Wed, 06 Feb 2013 17:00:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/8628</link>
      <guid>https://ruby-china.org/topics/8628</guid>
    </item>
    <item>
      <title>has_many 和 has_one 在 build 方法上的区别</title>
      <description>&lt;p&gt;不知道有多少人跟我一样在这里载坑了&lt;/p&gt;

&lt;p&gt;本来是想用 accepts_nested_attributes_for 写一个 nested form&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;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:account_attributes&lt;/span&gt;
  &lt;span class="n"&gt;has_one&lt;/span&gt; &lt;span class="ss"&gt;:account&lt;/span&gt;
  &lt;span class="n"&gt;accepts_nested_attributes_for&lt;/span&gt; &lt;span class="ss"&gt;:account&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Account&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;:password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:password_confirmation&lt;/span&gt;
  &lt;span class="n"&gt;has_secure_password&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UsersController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;new&lt;/span&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;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;view 里&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;form_for&lt;/span&gt; &lt;span class="vi"&gt;@user&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  email: &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text_field&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fields_for&lt;/span&gt; &lt;span class="ss"&gt;:account&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;account_form&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    password: &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;account_form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;password_field&lt;/span&gt; &lt;span class="ss"&gt;:password&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    password_confirmation: &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;account_form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;password_field&lt;/span&gt; &lt;span class="ss"&gt;:password_confirmation&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一开始无法显示 account 里的内容，后来发现没有在 controller 里 build account, 于是&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;UsersController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;new&lt;/span&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;new&lt;/span&gt;
    &lt;span class="vi"&gt;@user.account.build&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;报错 undefined method `build' for nil:NilClass&lt;/p&gt;

&lt;p&gt;刚开始怎么也想不通，隔了一天去翻&lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html&lt;/a&gt;
才发现原来 has_one 的 build 方法是 build_association 而不是 collection.build。因为不常用 has_one，rails 里“约定”又比较多，才会当 has_many 的方法来写。&lt;/p&gt;

&lt;p&gt;把 controller 里改成&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;UsersController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;new&lt;/span&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;new&lt;/span&gt;
    &lt;span class="vi"&gt;@user.build_account&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;程序才正常跑起来&lt;/p&gt;

&lt;p&gt;一言蔽之
&lt;strong&gt;在 has_many 中：User#accounts.build&lt;/strong&gt;
&lt;strong&gt;在 has_one 中：User#build_account&lt;/strong&gt;&lt;/p&gt;</description>
      <author>alex</author>
      <pubDate>Fri, 15 Jun 2012 03:06:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/3821</link>
      <guid>https://ruby-china.org/topics/3821</guid>
    </item>
    <item>
      <title>ruby 的三元操作符</title>
      <description>&lt;p&gt;看 ruby on rails tutorial 时有个地方说三元运算符是 var = boolean? ? foo : bar（&lt;a href="http://ruby.railstutorial.org/chapters/user-microposts?version=3.2#sidebar:ternary_operator" rel="nofollow" target="_blank"&gt;http://ruby.railstutorial.org/chapters/user-microposts?version=3.2#sidebar:ternary_operator&lt;/a&gt;）可我记得只有一个问号啊，查了下书也是，俩问号在 irb 和 rails c 下也是语法错误。  &lt;/p&gt;</description>
      <author>alex</author>
      <pubDate>Tue, 06 Mar 2012 15:07:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/1646</link>
      <guid>https://ruby-china.org/topics/1646</guid>
    </item>
    <item>
      <title>第一次来到 rubychina，真是太棒了</title>
      <description>&lt;p&gt;很高兴认识大家。  &lt;/p&gt;</description>
      <author>alex</author>
      <pubDate>Sat, 07 Jan 2012 23:36:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/767</link>
      <guid>https://ruby-china.org/topics/767</guid>
    </item>
  </channel>
</rss>
