<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Qcoder (Qcoder)</title>
    <link>https://ruby-china.org/Qcoder</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>关于 Rails 源码的学习路线和方法</title>
      <description>&lt;p&gt;对 Rails 学了两个月了，做了个小项目，现在想深入去了解 Rails 的实现机制，但是苦于不知道该如何进行，有没有 Rails 源码学习路线图？比如一个 Helper 模块里面各种方法如何去看，整体 Rails 的结构以及流程，知道流程如何去理解每一个模块，需要补充什么知识，看了 Rails Practice，但是就像八戒吞人参果，不知道什么味儿啊！&lt;/p&gt;

&lt;p&gt;真的是晦涩难懂，请前辈们指点一二，不胜感激。&lt;/p&gt;</description>
      <author>Qcoder</author>
      <pubDate>Thu, 22 Dec 2016 21:13:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/31979</link>
      <guid>https://ruby-china.org/topics/31979</guid>
    </item>
    <item>
      <title>夭寿了，关于单表继承和多态的使用 (STI and polymorphs)</title>
      <description>&lt;p&gt;环境&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ruby 2.3.1
Rails 5.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;代码&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;Car&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;has_many&lt;/span&gt; &lt;span class="ss"&gt;:prices&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:as&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:priceable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:dependent&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:destroy&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;Bicycle&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Car&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;Price&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;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:priceable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:polymorphic&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="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:counter_cache&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;很奇怪，想取 Bicycle 的所有价目明细&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Bicycle.first.prices&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sql 居然是这样的&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Price Load (0.9ms)   SELECT "prices".* FROM "prices" WHERE ("prices"."pricetable_id" = 1 and "prices"."priceable_type" = 'Car') ORDER BY created_at
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;priceable_type = 'Car'&lt;/code&gt; 居然取的是 Car，不是预期的 Bicycle&lt;/p&gt;

&lt;p&gt;看了很多资料，说是取的 base_class 而不是 self_class&lt;/p&gt;

&lt;p&gt;有个人提了个 PR &lt;a href="https://github.com/rails/rails/pull/20963" rel="nofollow" target="_blank"&gt;https://github.com/rails/rails/pull/20963&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;但是被关闭了，有人解释下为什么这个问题一直在，然后该怎么解决？
（ps: 我现在在 Bicycle model 写了个 prices 方法，自己去取）&lt;/p&gt;

&lt;p&gt;参考资料：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rails/rails/issues/20893" rel="nofollow" target="_blank"&gt;https://github.com/rails/rails/issues/20893&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Polymorphic+Associations" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Polymorphic+Associations&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;补充：Cars 的 migration&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class CreateCars &amp;lt; ActiveRecord::Migration[5.0]
  def change
    create_table :Cars do |t|
      t.string :name
      t.string :bio
      t.integer :prices_count
      t.string :type

      t.timestamps
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>Qcoder</author>
      <pubDate>Tue, 20 Dec 2016 18:47:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/31953</link>
      <guid>https://ruby-china.org/topics/31953</guid>
    </item>
  </channel>
</rss>
