<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>itsvoid (黄树)</title>
    <link>https://ruby-china.org/itsvoid</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>devise+sidekiq: development 环境正常发信，生产环境发信失败报错</title>
      <description>&lt;p&gt;错误发生在 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/devise-2.1.2/lib/devise/mapping.rb:42:in `find_scope!'
不知怎样 debug，求教。&lt;/p&gt;

&lt;p&gt;Using devise (2.1.2) 
Using devise-async (0.5.1) &lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="no"&gt;T13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;4398&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;iwifq&lt;/span&gt; &lt;span class="no"&gt;Devise&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Async&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Backend&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Sidekiq&lt;/span&gt; &lt;span class="no"&gt;JID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="n"&gt;f5e59385b6152dffc70b894&lt;/span&gt; &lt;span class="no"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;
  &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="no"&gt;T13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;4398&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;iwifq&lt;/span&gt; &lt;span class="no"&gt;Devise&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Async&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Backend&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Sidekiq&lt;/span&gt; &lt;span class="no"&gt;JID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="n"&gt;f5e59385b6152dffc70b894&lt;/span&gt; &lt;span class="no"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="ss"&gt;fail: &lt;/span&gt;&lt;span class="mf"&gt;0.021&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;
  &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="no"&gt;T13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;4398&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;iwifq&lt;/span&gt; &lt;span class="no"&gt;WARN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"retry"&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="s2"&gt;"queue"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"mailer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"Devise::Async::Backend::Sidekiq"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"reset_password_instr    uctions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"5155441417f9233ae0000001"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s2"&gt;"jid"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"9f5e59385b6152dffc70b894"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"error_message"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"Could not find a valid mapping for nil"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"error_clas    s"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"RuntimeError"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"failed_at"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"2014-02-26T13:11:43Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"retry_count"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"retried_at"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt; &lt;span class="no"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="no"&gt;T13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;4398&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;iwifq&lt;/span&gt; &lt;span class="no"&gt;WARN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Could&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;find&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;valid&lt;/span&gt; &lt;span class="n"&gt;mapping&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;
  &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="no"&gt;T13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;4398&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;iwifq&lt;/span&gt; &lt;span class="no"&gt;WARN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;devise&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;devise&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`find_scope!'
 10 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/devise-2.1.2/lib/devise/mailers/helpers.rb:20:in `&lt;/span&gt;&lt;span class="n"&gt;initialize_from_record&lt;/span&gt;&lt;span class="s1"&gt;'
 11 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/devise-2.1.2/lib/devise/mailers/helpers.rb:15:in `devise_mail'&lt;/span&gt;
 &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;devise&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mailers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;devise&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`reset_password_instructions'
 13 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionpack-3.2.5/lib/abstract_controller/base.rb:167:in `&lt;/span&gt;&lt;span class="n"&gt;process_action&lt;/span&gt;&lt;span class="s1"&gt;'
 14 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionpack-3.2.5/lib/abstract_controller/base.rb:121:in `process'&lt;/span&gt;
 &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;actionpack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3.2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;abstract_controller&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`process'
 16 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionmailer-3.2.5/lib/action_mailer/base.rb:457:in `&lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="s1"&gt;'
 17 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionmailer-3.2.5/lib/action_mailer/base.rb:452:in `initialize'&lt;/span&gt;
 &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;actionmailer&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3.2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;action_mailer&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;439&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`new'
 19 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionmailer-3.2.5/lib/action_mailer/base.rb:439:in `&lt;/span&gt;&lt;span class="nb"&gt;method_missing&lt;/span&gt;&lt;span class="s1"&gt;'
 20 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/devise-async-0.5.1/lib/devise/async/backend/base.rb:15:in `perform'&lt;/span&gt;
 &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;49&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`block (3 levels) in process'
 22 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/chain.rb:109:in `&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="s1"&gt;'
 23 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/chain.rb:109:in `block in invoke'&lt;/span&gt;
 &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;middleware&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`call'
 25 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/chain.rb:111:in `&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;invoke&lt;/span&gt;&lt;span class="s1"&gt;'
 26 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/server/active_record.rb:6:in `call'&lt;/span&gt;
 &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;middleware&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`block in invoke'
 28 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/server/retry_jobs.rb:50:in `&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="s1"&gt;'
 29 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/chain.rb:111:in `block in invoke'&lt;/span&gt;
 &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;middleware&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`block in call'
 31 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/logging.rb:22:in `&lt;/span&gt;&lt;span class="n"&gt;with_context&lt;/span&gt;&lt;span class="s1"&gt;'
 32 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/server/logging.rb:7:in `call'&lt;/span&gt;
 &lt;span class="mi"&gt;33&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p327&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sidekiq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;middleware&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`block in invoke'
 34 /usr/local/rvm/gems/ruby-1.9.3-p327/gems/sidekiq-2.9.0/lib/sidekiq/middleware/chain.rb:114:in `&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 26 Feb 2014 21:23:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/17510</link>
      <guid>https://ruby-china.org/topics/17510</guid>
    </item>
    <item>
      <title>sidekiq 自动启动问题</title>
      <description>&lt;p&gt;我正在用 devise-async 这个 gem，用来异步发送邮件，工作良好。&lt;/p&gt;

&lt;p&gt;我需要在 development，test，prod 环境测试得话，我要开 3 个 CLI 呢，虽然可以 nohup。有没有更好得方案呢，比如
sidekiq 可否放到 initializer 里面去，启动 daemon 呢？（我理解得 initializer 是，每次重启 touch tmp/restart.txt就可以重启各种initializer）&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Sun, 07 Apr 2013 13:08:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/9998</link>
      <guid>https://ruby-china.org/topics/9998</guid>
    </item>
    <item>
      <title>关于子类复用父类 before_fitler 的问题</title>
      <description>&lt;p&gt;父类 ParentController 里面有一个 before_fitler x，应用在父类 action A,B,C 上。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Class ParentController
before_filter :x, only: [:A, :B, :C]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;子类 ChildController 继承于 ParentController，但是有一个新 action D，同样需要将 x 应用在其 D 上，而且继承而来的 A，B，C 的 before_filter x 保留。&lt;/p&gt;

&lt;p&gt;如果这样写：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;before_filter :x, only: [:D]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么，子类中 A，B，C 就没有 before_fitler X 了。&lt;/p&gt;

&lt;p&gt;求解？&lt;/p&gt;

&lt;p&gt;我需要的很像这样：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;before_filter :x, add: [:D]
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>itsvoid</author>
      <pubDate>Thu, 28 Mar 2013 12:35:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/9810</link>
      <guid>https://ruby-china.org/topics/9810</guid>
    </item>
    <item>
      <title>整理了一些 ruby rails 的相关网站帮助大家搜索</title>
      <description>&lt;p&gt;因为自己正在实践 rails，需要查找 ruby 相关资料。在网上搜到的 ruby rails 相关网站，有一些已经没法用了，所以特别整理了一下还能用的，做了个自定义搜索引擎，收录了 19 个网站，有教学视频，国内外，论坛博客等，大家可以帮忙补充。&lt;/p&gt;

&lt;p&gt;自定义搜索定义在这里： &lt;a href="http://www.cookgoogle.com/nodes/%E8%81%8C%E4%B8%9A/cses/512ad1fc17f92374b3000003" rel="nofollow" target="_blank"&gt;http://www.cookgoogle.com/nodes/%E8%81%8C%E4%B8%9A/cses/512ad1fc17f92374b3000003&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;使用很简单，比如搜索“rails cache”：
&lt;a href="http://www.cookgoogle.com/q/512ad1fc17f92374b3000003/rails%20cache" rel="nofollow" target="_blank"&gt;http://www.cookgoogle.com/q/512ad1fc17f92374b3000003/rails%20cache&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;大家可以根据需要定义搜索偏好，比如排名，分类。&lt;/p&gt;

&lt;p&gt;PS，
关于自定义搜索是什么，见&lt;a href="https://developers.google.com/custom-search/docs/start?hl=en" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Mon, 25 Feb 2013 12:51:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/8908</link>
      <guid>https://ruby-china.org/topics/8908</guid>
    </item>
    <item>
      <title>mongoid 多态查询问题</title>
      <description>&lt;p&gt;比如有 1 个父类 class ipad，然后 ipad2,ipad3, ipad4 分别继承于 ipad。&lt;/p&gt;

&lt;p&gt;我作为 user，has_many ipads。&lt;/p&gt;

&lt;p&gt;请问，如何分别得到 ipad2, ipad3, ipad4，就像如下逻辑：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;user.ipads(:ipad2)&lt;/code&gt; -&amp;gt; 只是 ipad2&lt;/p&gt;

&lt;p&gt;&lt;code&gt;user.ipads&lt;/code&gt; -&amp;gt; 全部 ipad&lt;/p&gt;

&lt;p&gt;&lt;code&gt;user.ipad(:ipad2, ipad3)&lt;/code&gt; -&amp;gt; ipad2 和 ipad3 &lt;/p&gt;

&lt;p&gt;mongoid 如何查询？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 20 Feb 2013 18:15:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/8809</link>
      <guid>https://ruby-china.org/topics/8809</guid>
    </item>
    <item>
      <title>Mongoid 的一个数组的 item 如果有更新，如何一次性 update？</title>
      <description>&lt;p&gt;比如说一个 projects 里面放置有 query 出来的 project，我对每个 project 的一个属性，比如 status 更改为'draft'，那么如何只对 mongodb 进行一次 update 操作？&lt;/p&gt;

&lt;p&gt;我现在的做法是：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'draft'&lt;/span&gt;
  &lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样应该是，每一次内存更新都会触发数据库更新，我想能不能有一个 projects.update_all（update_all 对一个数组对象）&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 21 Nov 2012 12:04:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/6960</link>
      <guid>https://ruby-china.org/topics/6960</guid>
    </item>
    <item>
      <title>mongoid has_and_belongs_to_many 疑惑</title>
      <description>&lt;p&gt;这个问题纠结了我很长时间了，求解。我的上下文是这样的：
我有 2 个 model，一个是 User，另外一个是 CustomSearchEngine，两者关系为 has_and_belongs_to_many，具体定义如下：&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="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Mongoid&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;
  &lt;span class="c1"&gt;# Include default devise modules. Others available are:&lt;/span&gt;
  &lt;span class="o"&gt;......&lt;/span&gt;
  &lt;span class="c1"&gt;# keep the CSEs&lt;/span&gt;
  &lt;span class="n"&gt;has_and_belongs_to_many&lt;/span&gt; &lt;span class="ss"&gt;:keeped_custom_search_engines&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class_name: &lt;/span&gt;&lt;span class="s1"&gt;'CustomSearchEngine'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;inverse_of: :consumers&lt;/span&gt;

  &lt;span class="c1"&gt;# create or fork the CSEs&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:custom_search_engines&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;inverse_of: :author&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;dependent: :destroy&lt;/span&gt;

  &lt;span class="c1"&gt;# Index&lt;/span&gt;
  &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="ss"&gt;username: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;unique: &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;name: &lt;/span&gt;&lt;span class="s1"&gt;'user_username'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;unique: &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;name: &lt;/span&gt;&lt;span class="s1"&gt;'user_email'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="c1"&gt;# Massive assignment for User.new&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;:username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:agreement&lt;/span&gt;&lt;span class="p"&gt;,&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="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:agreement&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;validates&lt;/span&gt; &lt;span class="ss"&gt;:password_confirmation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:agreement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&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;CustomSearchEngine&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Mongoid&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Mongoid&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Timestamps&lt;/span&gt;
  &lt;span class="n"&gt;paginates_per&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;
 &lt;span class="o"&gt;...&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:author&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class_name: &lt;/span&gt;&lt;span class="s1"&gt;'User'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;inverse_of: :custom_search_engines&lt;/span&gt;
  &lt;span class="n"&gt;has_and_belongs_to_many&lt;/span&gt; &lt;span class="ss"&gt;:consumers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class_name: &lt;/span&gt;&lt;span class="s1"&gt;'User'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;inverse_of: :keeped_custom_search_engines&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:node&lt;/span&gt;

  &lt;span class="c1"&gt;# Index&lt;/span&gt;
  &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="ss"&gt;author_id: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;name: &lt;/span&gt;&lt;span class="s1"&gt;'cse_author_id'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="ss"&gt;node_id: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;name: &lt;/span&gt;&lt;span class="s1"&gt;'cse_node_id'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="c1"&gt;# validations&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &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;inclusion: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;in: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'draft'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'publish'&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:author_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:node_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;

  &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:recent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;status: &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:created_at&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后&lt;code&gt;current_user.keeped_custom_search_engines.push custom_search_engine&lt;/code&gt;，
数据库 user 的 keeped_custom_search_engine_ids 成功 push，但是 custom_search_engine 的 consumer_ids 确为空，查询错误记录，有一条是：
&lt;code&gt;@messages={:consumers=&amp;gt;["是无效的"]}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;这是什么问题呢？？？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Tue, 13 Nov 2012 17:32:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/6732</link>
      <guid>https://ruby-china.org/topics/6732</guid>
    </item>
    <item>
      <title>mongoid update 返回 true，但没有更新成功</title>
      <description>&lt;p&gt;我有一个 model，名为 CustomSearchEngine
命令行下：
&lt;code&gt;irb(main):044:0&amp;gt; cse=CustomSearchEngine.last&lt;/code&gt;
返回实例，这没问题：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;CustomSearchEngine _id: 50a1fc222061c78416000001, _type: nil, created_at: 2&lt;/span&gt;
&lt;span class="mo"&gt;012&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt; &lt;span class="no"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;updated_at: &lt;/span&gt;&lt;span class="mi"&gt;2012&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="no"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;parent_id: &lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sta&lt;/span&gt;
&lt;span class="ss"&gt;tus: &lt;/span&gt;&lt;span class="s2"&gt;"draft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;author_id: &lt;/span&gt;&lt;span class="s2"&gt;"50a047742061c77019000076"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;consumer_ids: &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="ss"&gt;node_id:
&lt;/span&gt;&lt;span class="s2"&gt;"508a3fee2061c76825000001"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意 status:"draft"
然后，我执行 cse.update(status:"publish") 后，返回：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;irb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="mo"&gt;045&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="ss"&gt;:"publish"&lt;/span&gt;&lt;span class="p"&gt;)&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="n"&gt;irb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="mo"&gt;046&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cse&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;CustomSearchEngine _id: 50a1fc222061c78416000001, _type: nil, created_at: 2&lt;/span&gt;
&lt;span class="mo"&gt;012&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt; &lt;span class="no"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;updated_at: &lt;/span&gt;&lt;span class="mi"&gt;2012&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="no"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;parent_id: &lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sta&lt;/span&gt;
&lt;span class="ss"&gt;tus: &lt;/span&gt;&lt;span class="s2"&gt;"draft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;author_id: &lt;/span&gt;&lt;span class="s2"&gt;"50a047742061c77019000076"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;consumer_ids: &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="ss"&gt;node_id:
&lt;/span&gt;&lt;span class="s2"&gt;"508a3fee2061c76825000001"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;update 结果执行为 true，但是 status 还是 draft，这是何故？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Tue, 13 Nov 2012 16:02:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/6726</link>
      <guid>https://ruby-china.org/topics/6726</guid>
    </item>
    <item>
      <title>ruby-china 源码疑惑</title>
      <description>&lt;p&gt;在 notification controller 的源码里面：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="vi"&gt;@notifications&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notifications&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt; &lt;span class="ss"&gt;:page&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;:page&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="ss"&gt;:per_page&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中这个 recent，我在 Notification::Base 里面没有发现有这个 scope 呢？难道是&lt;code&gt;Mongoid::BaseModel&lt;/code&gt;里面自带的？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Mon, 12 Nov 2012 10:18:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/6689</link>
      <guid>https://ruby-china.org/topics/6689</guid>
    </item>
    <item>
      <title>mongoid 如何实作 HABTM?</title>
      <description>&lt;p&gt;比如有一个 has_and_blongs_to_many 关系，user 和 project。&lt;/p&gt;

&lt;p&gt;如何持久化呢？user.projects.push(this_project) 就可以了吗（光是用这一句，有的时候 project 没有持久化 user，报错 user invalid，非常诡异的是，有的时候才报错，有的时候 user 和 project 两边都能更新成功）？是不是一定还需要 project.users.push（this_user)？
另外，觉得 push 比较生硬，有其他的方式吗？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 24 Oct 2012 09:44:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/6280</link>
      <guid>https://ruby-china.org/topics/6280</guid>
    </item>
    <item>
      <title>HABTM validate 问题</title>
      <description>&lt;p&gt;我的一个类里面有一个 has_and_belongs_to_many(HABTM)：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;has_and_belongs_to_many&lt;/span&gt; &lt;span class="ss"&gt;:consumers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class_name: &lt;/span&gt;&lt;span class="s1"&gt;'User'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;inverse_of: :projects&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并没有为这个 consumers 设定任何的 validate(包括在 User 类中也没有对 projects 的任何 validate)&lt;/p&gt;

&lt;p&gt;但是当 project.consumers 中有值时，update 会有一个&lt;code&gt;默认&lt;/code&gt;的 validate 对 consumers，我不知道从哪里来的这个 validate？？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Sat, 29 Sep 2012 21:44:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/5833</link>
      <guid>https://ruby-china.org/topics/5833</guid>
    </item>
    <item>
      <title>mongoid 按字段 group 怎么做？</title>
      <description>&lt;p&gt;在我的 db 里面，每一条记录有一个 access 字段 ('public', 'protected', 'private')，我想 item.all 的数组是直接按 access 分好的，想 new_list['public'] = [...], new_list['protected'] = [...] 这种，不知 rails 有相应的函数吗？还是要自己写一个 map block？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Fri, 28 Sep 2012 09:42:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/5797</link>
      <guid>https://ruby-china.org/topics/5797</guid>
    </item>
    <item>
      <title>nested attributes (belongs_to) 如何写 select？</title>
      <description>&lt;p&gt;我使用的是 mongoid，场景类似于：
class Person
 ...
 belongs_to address
 accepts_nested_attributes_for :address
 attr_accessible :address
end&lt;/p&gt;

&lt;p&gt;然后 address 这个 class has_many person。我的问题是我想写一个 form 的 select，我的代码如下：&lt;/p&gt;

&lt;p&gt;&amp;lt;%= form_for &lt;a href="/person" class="user-mention" title="@person"&gt;&lt;i&gt;@&lt;/i&gt;person&lt;/a&gt; do |f|%&amp;gt;
 &amp;lt;%= f.fields_for :address do |address_field|%&amp;gt;
  &amp;lt;%= address_field.select :street, Address.all %&amp;gt;
 &amp;lt;% end %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;/p&gt;

&lt;p&gt;现在的问题是，select 无法显示。而我直接用:
f.select 或者 f.collection_select 可以显示 select，但是无法写入 address_attributes。&lt;/p&gt;

&lt;p&gt;求解如何将 select 用于 belongs_to 场景。&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Thu, 20 Sep 2012 20:02:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/5662</link>
      <guid>https://ruby-china.org/topics/5662</guid>
    </item>
    <item>
      <title>mongodb 中有默认的一些初始值如何部署？</title>
      <description>&lt;p&gt;我有一个 category 的 collection，里面有默认的一些值，我希望部署的时候，自动加入这些默认值，是需要用 capistrino 吗？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 19 Sep 2012 15:14:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/5632</link>
      <guid>https://ruby-china.org/topics/5632</guid>
    </item>
    <item>
      <title>rails 安全编程几个小问题</title>
      <description>&lt;p&gt;才从 php 转过来，有几个关于安全的小问题问问：
1.rails 自动 add_slash 吗？还是有 rails 函数可以调用呢？
2.rails 有转义 html 的函数吗？防止 xss
3.开放问题，常用的 rails 安全实践（最好是你写过的，谢谢分享！）。&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Mon, 10 Sep 2012 17:40:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/5459</link>
      <guid>https://ruby-china.org/topics/5459</guid>
    </item>
    <item>
      <title>mongo mapper 嵌套的文档如何写 form_for</title>
      <description>&lt;p&gt;有一个 model，outer，其有嵌套文档 specification，annotations，comments，我现在想用 form_for &lt;a href="/outer" class="user-mention" title="@outer"&gt;&lt;i&gt;@&lt;/i&gt;outer&lt;/a&gt;，传统数据库，可以用 symbol，这样写：
&lt;code&gt;&amp;lt;%= f.label :name, "名称", class: 'control-label' %&amp;gt;&lt;/code&gt;
嵌套的该怎么写呢？
&lt;code&gt;&amp;lt;%= f.label @outer.specification.title.to_sym, "名称", class: 'control-label' %&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;class Outer
  include MongoMapper::EmbeddedDocument
  key :author_uid, ObjectId, required: true
  key :name, String
  one :specification&lt;/p&gt;

&lt;p&gt;many :annotations&lt;/p&gt;

&lt;p&gt;many :comments
  timestamps!&lt;/p&gt;

&lt;p&gt;end&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Thu, 06 Sep 2012 09:56:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/5390</link>
      <guid>https://ruby-china.org/topics/5390</guid>
    </item>
    <item>
      <title>NameError: uninitialized constant</title>
      <description>&lt;p&gt;有一个 mongo mapper model，定义如下：&lt;/p&gt;

&lt;p&gt;class CustomSearchEngine
  include MongoMapper::EmbeddedDocument
  key :author_uid, ObjectId, required: true
  key :category, Integer, required: true
  key :access, Integer, default: 0, required: true
  key :voters, Array
  key :votes, Integer, default: 0
  key :current_links, Integer, default: 1
  key :history_links, Integer, default: 1&lt;/p&gt;

&lt;p&gt;# custom search engine specification
  one :specification
  # custom search engine annotations
  many :annotations&lt;/p&gt;

&lt;p&gt;many :comments
  timestamps!&lt;/p&gt;

&lt;p&gt;belongs_to :user&lt;/p&gt;

&lt;p&gt;attr_accessible :category, :access, :voters, :votes&lt;/p&gt;

&lt;p&gt;end&lt;/p&gt;

&lt;p&gt;我在 console 下面，运行 &lt;code&gt;CustomSearchEngine.new&lt;/code&gt;，报错：&lt;/p&gt;

&lt;p&gt;NameError: uninitialized constant Specifications&lt;/p&gt;

&lt;p&gt;这是什么问题？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 05 Sep 2012 16:52:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/5378</link>
      <guid>https://ruby-china.org/topics/5378</guid>
    </item>
    <item>
      <title>关于 I18n 的几个问题</title>
      <description>&lt;p&gt;1 我在 zh-CN.yml 中怎么定义 mongodb（我使用的是 mongo mapper）？网上的例子都是 activerecord 的。&lt;/p&gt;

&lt;p&gt;2 是不是在 zh-CN.yml 中定义了表名，key 名，像 form_for 之类的就可以自动找到翻译后的字串？比如 f.label :name，就去找 name: 名字&lt;/p&gt;

&lt;p&gt;3 改了 zh-CN.yml，每次都需要重启 web server 或者 console 才能生效，有刷新的方法吗？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Wed, 05 Sep 2012 09:28:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/5367</link>
      <guid>https://ruby-china.org/topics/5367</guid>
    </item>
    <item>
      <title>mongo mapper 新建 class 不起作用</title>
      <description>&lt;p&gt;我使用的是 mongo mapper，我新建了一个 Model class：&lt;/p&gt;

&lt;p&gt;class Book
  include MongoMapper::Document&lt;/p&gt;

&lt;p&gt;key :name, String
  key :description, String&lt;/p&gt;

&lt;p&gt;end&lt;/p&gt;

&lt;p&gt;但是数据库里面并没有生成这个 Book 表。怎样才能将新建的 Book 加进数据库呢？&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Mon, 03 Sep 2012 22:24:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/5338</link>
      <guid>https://ruby-china.org/topics/5338</guid>
    </item>
    <item>
      <title>怎么在 route 中自定义 param</title>
      <description>&lt;p&gt;我的一个脚手架 controller：mycontroller&lt;/p&gt;

&lt;p&gt;match '/q/:query', :to =&amp;gt; 'mycontroller#show'&lt;/p&gt;

&lt;p&gt;我想在 show 方法中使用到 params[:query]，但是 rails 报错，什么原因？&lt;/p&gt;

&lt;p&gt;wrong number of arguments (1 for 0)&lt;/p&gt;</description>
      <author>itsvoid</author>
      <pubDate>Mon, 03 Sep 2012 16:11:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/5336</link>
      <guid>https://ruby-china.org/topics/5336</guid>
    </item>
  </channel>
</rss>
