<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>newlife_in_s1</title>
    <link>https://ruby-china.org/newlife_in_s1</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>rspec 测试时无法链接到 sunspot:solr</title>
      <description>&lt;p&gt;一些 model 通过 solr 定义成可搜索的对象。
在 rspec 的测试代码中创建这些对象时出现了无法连接到 solr 服务器的错误&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Errno&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ECONNREFUSED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Connection&lt;/span&gt; &lt;span class="n"&gt;refused&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后我尝试在 rails_helper 中加入启动 solr 的代码，虽然 solr 服务启动了，但是还是同样的错误&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;before&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:suite&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="nb"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"rake"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"sunspot:solr:start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"RAILS_ENV=test"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为我并不需要在 rspec 中测试搜索功能，请问是否能够设置成在测试环境下就忽略 solr 的搜索定义，使创建对象不需要跟 solr 打交道？&lt;/p&gt;</description>
      <author>newlife_in_s1</author>
      <pubDate>Thu, 23 Oct 2014 11:49:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/22211</link>
      <guid>https://ruby-china.org/topics/22211</guid>
    </item>
    <item>
      <title>关于 factory_girl 的重复创建关联对象问题</title>
      <description>&lt;p&gt;在 factory_girl 里我定义了下面的一些数据&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:user_1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;email&lt;/span&gt;             &lt;span class="s2"&gt;"123@123.com"&lt;/span&gt;
  &lt;span class="n"&gt;password&lt;/span&gt;        &lt;span class="s2"&gt;"xxx"&lt;/span&gt;
  &lt;span class="n"&gt;password_confirmation&lt;/span&gt;      &lt;span class="s2"&gt;"xxx"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;另外还有两个user&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;假设分别为user2和user3&lt;/span&gt;

&lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:question_1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="no"&gt;Question&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt;       &lt;span class="s2"&gt;"题目"&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt;     &lt;span class="s2"&gt;"内容"&lt;/span&gt;
  &lt;span class="n"&gt;association&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;factory: :user_1&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:answer_1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="no"&gt;Answer&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt;             &lt;span class="s2"&gt;"答案1"&lt;/span&gt;
  &lt;span class="n"&gt;association&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;factory: :user_2&lt;/span&gt;
  &lt;span class="n"&gt;association&lt;/span&gt; &lt;span class="ss"&gt;:question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;factory: :question_1&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:answer_2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="no"&gt;Answer&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt;             &lt;span class="s2"&gt;"答案2"&lt;/span&gt;
  &lt;span class="n"&gt;association&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;factory: :user_3&lt;/span&gt;
  &lt;span class="n"&gt;association&lt;/span&gt; &lt;span class="ss"&gt;:question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;factory: :question_1&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;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;answer_1&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;:answer_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;answer_2&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;:answer_2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就报错&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;RecordInvalid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Validation&lt;/span&gt; &lt;span class="ss"&gt;failed: &lt;/span&gt;&lt;span class="no"&gt;Email&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;already&lt;/span&gt; &lt;span class="n"&gt;been&lt;/span&gt; &lt;span class="n"&gt;taken&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为错误提示是在 answer_2 创建的那行，我认为应该是因为我的两个答案都关联了 question_1，那么在创建 answer_1 的时候关联创建了 question_1 及 user_1，创建 answer_2 的时候又再重复创建 question_1 及 user_1，所以 user_1 被创建了 2 次，key 重复了。&lt;/p&gt;

&lt;p&gt;请问在应该如何解决这问题？是否不应该所有 fk 处都用 association 呢？&lt;/p&gt;</description>
      <author>newlife_in_s1</author>
      <pubDate>Thu, 23 Oct 2014 11:24:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/22209</link>
      <guid>https://ruby-china.org/topics/22209</guid>
    </item>
  </channel>
</rss>
