<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Focinfi (Focinfi)</title>
    <link>https://ruby-china.org/Focinfi</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Rails fixture 机制</title>
      <description>&lt;p&gt;Rails 新手，在看书《Agile Web Development With Rails 4》&lt;/p&gt;

&lt;p&gt;在 Check Out 这一节，新建了 scaffold Order 和 migration add_order_to_line_item&lt;/p&gt;

&lt;p&gt;这里我忘记了在 models/line_item.rb 添加 belongs_to :order&lt;/p&gt;

&lt;p&gt;但是创建订单的功能并没有问题，直到修改 fixtures/line_items.yml 成：&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;one&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;product&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mac&lt;/span&gt;
  &lt;span class="na"&gt;order&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;one&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试时报错：table line_items has no column named order&lt;/p&gt;

&lt;p&gt;所以，我的理解是：
1.model 中的 belongs_to 和 has_many 都是只是说明自己和别人的关系。在功能上 Order 只是创建 LineItem，所以只要在 models/order.rb 写 has_many :line_items，代码就能跑起来。&lt;/p&gt;

&lt;p&gt;2.而当跑测试时，要将 fixtures/..的数据 insert 到数据库，而此时在 models/line_item.rb 中没有 belongs_to :order，数据库 line_items 表就不知道有外键 order_id，所以会报上面的错误。&lt;/p&gt;

&lt;p&gt;不知道我的理解有没有问题，还请各位前辈指点。&lt;/p&gt;</description>
      <author>Focinfi</author>
      <pubDate>Sat, 20 Sep 2014 17:03:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/21631</link>
      <guid>https://ruby-china.org/topics/21631</guid>
    </item>
  </channel>
</rss>
