<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>karloku (Karloku Sang)</title>
    <link>https://ruby-china.org/karloku</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Mongoid 的自动 eager load: Mongoload</title>
      <description>&lt;p&gt;N+1 查询是大家经常碰到要去消灭的东西。常用的方法就是使用 #includes/joins/eager_load 等方法，在查询数据集的时候通知 ORM 去将关联数据用某种方式先预载出来.
但是开发时老要想着这件事还是比较烦人的。最近在用 GraphQL 重写一个后台服务碰到比较头疼的问题。在写 API 的时候，每个接口返回的数据都是非常确定的，所以可以事先确定什么地方需要进行 eager loading. GraphQL 将组织查询结果的权利交给了前端。这时候后端就无法在编写代码时就确定要 eager load 哪些关系了.
在 ActiveRecord 的世界中有一个很出色的 gem &lt;a href="https://github.com/salsify/goldiloader" rel="nofollow" target="_blank" title=""&gt;Goldiloader&lt;/a&gt;. 可以在代码执行中根据对关系的访问来自动执行 eager_load. 找了很久，在 Mongoid 社区似乎还没有一个这样的 gem. 于是只能自己去实现类似的功能。&lt;/p&gt;
&lt;h2 id="功能"&gt;功能&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;自动&lt;/em&gt;&lt;/strong&gt; 依据对关系的访问，决定是否进行 eager loading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;has_one&lt;/li&gt;
&lt;li&gt;has_many&lt;/li&gt;
&lt;li&gt;belongs_to&lt;/li&gt;
&lt;li&gt;has_and_belongs_to_many&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2016-4-28更新"&gt;2016-4-28 更新&lt;/h3&gt;
&lt;p&gt;新增两个选项 &lt;code&gt;:auto_include&lt;/code&gt; 和 &lt;code&gt;:fully_load&lt;/code&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;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="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:user_groups&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;auto_include: &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;fully_load: &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;ul&gt;
&lt;li&gt;auto_include: &lt;strong&gt;true&lt;/strong&gt;/false. 当值为 false 时，不自动进行 eager loading&lt;/li&gt;
&lt;li&gt;fully_load: true/&lt;strong&gt;false&lt;/strong&gt;. 当值为 true 时，执行 #first, #last, #size, #empty? 等方法，也会先进行 eager loading.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;在 Gemfile 中添加&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'mongoload'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或是通过 gem 命令安装&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;mongoload
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="支持版本"&gt;支持版本&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ruby &amp;gt;~ 2.1 (用到 Module#prepend)&lt;/li&gt;
&lt;li&gt;mongoid &amp;gt;~ 5.0
另外支持 github.com/mongodb/mongoid/tree/master 分支中的 mongoid 6.0.0, 由于 mongoid 6.0.0 依赖 ActiveModel 5.0.0, 因此需要 ruby &amp;gt;= 2.2.2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Github"&gt;Github&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/karloku/mongoload" rel="nofollow" target="_blank" title=""&gt;Mongoload&lt;/a&gt;&lt;/p&gt;</description>
      <author>karloku</author>
      <pubDate>Wed, 27 Apr 2016 15:21:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/29870</link>
      <guid>https://ruby-china.org/topics/29870</guid>
    </item>
    <item>
      <title>[上海] 阿里巴巴和 SMG 战略合作项目 -- 招募 Ruby 工程师</title>
      <description>&lt;h2 id="马云都投钱了 你还在等什么"&gt;马云都投钱了 你还在等什么&lt;/h2&gt;
&lt;p&gt;6 月上海文广集团（SMG）与阿里巴巴在上海联合宣布，双方将充分发挥各自在传媒与大数据领域的资源优势，共同将 SMG 旗下的第一财经传媒公司（以下简称“第一财经”），打造成具有全球影响力的新型数字化财经媒体与信息服务集团。&lt;/p&gt;

&lt;p&gt;没错，SMG 和阿里巴巴合作的产物之一这就是我们！&lt;/p&gt;
&lt;h2 id="我们的产品"&gt;我们的产品&lt;/h2&gt;
&lt;p&gt;我们在做一款财经 APP，这是结合第一财经媒体优势和阿里巴巴数据优势的顶尖 APP 产品。We aim for the best! 产品预计 9 月上线，现在加入的你，将成为我们团队的创始成员！&lt;/p&gt;
&lt;h2 id="平等、自由、尊重个人"&gt;平等、自由、尊重个人&lt;/h2&gt;
&lt;p&gt;我们不管种族、年龄、性别、性向、性取向、学历、信仰、家庭背景和职业经历那些无关紧要的东西，给予每一个应聘者同等的机会。团队采用扁平化管理，尽力创造平等的氛围。当然不仅体现在每个人在同样的环境中办公、享有同样的福利和着装等自由（对的，我们的工程师会抱着抱枕上班），更重要的是在讨论中，所有团队成员具有相同的表达机会，以论据的可靠而非职位的高低来确定最优方案。&lt;/p&gt;
&lt;h2 id="我们希望你是……"&gt;我们希望你是……&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2 年以上 Ruby 开发经验，1 年以上 Ruby on Rails 开发经验；&lt;/li&gt;
&lt;li&gt;有编写自动化测试用例的习惯；&lt;/li&gt;
&lt;li&gt;有扎实的编程功底，熟悉数据结构和算法；&lt;/li&gt;
&lt;li&gt;喜爱服务器后台编程；&lt;/li&gt;
&lt;li&gt;有过 Sinatra, Padrino 或 Grape 框架下的开发经验者优先；&lt;/li&gt;
&lt;li&gt;熟悉 redis, MongoDB, Elasticsearch 等 NoSQL 数据仓库者优先；&lt;/li&gt;
&lt;li&gt;理解框架运作原理者优先。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我们能提供给你的是……"&gt;我们能提供给你的是……&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有竞争力的薪酬待遇；&lt;/li&gt;
&lt;li&gt;SMG 食堂的准入资格；&lt;/li&gt;
&lt;li&gt;逢年过节的各种福利；&lt;/li&gt;
&lt;li&gt;弹性工作制由你安排；&lt;/li&gt;
&lt;li&gt;商业医疗保险；&lt;/li&gt;
&lt;li&gt;住房公积金；&lt;/li&gt;
&lt;li&gt;饭补等。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;工作地点：上海市南京西路 651 号广电大厦
如果你对该职位感兴趣，请把简历发至：zhangbaoyuan@yicai.com
联系方式：18501747987&lt;/p&gt;</description>
      <author>karloku</author>
      <pubDate>Mon, 29 Jun 2015 17:33:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/26241</link>
      <guid>https://ruby-china.org/topics/26241</guid>
    </item>
    <item>
      <title>[上海] 阿里巴巴和 SMG 战略合作项目 -- 招募 Ruby 工程师 </title>
      <description>&lt;h2 id="马云都投钱了 你还在等什么"&gt;马云都投钱了 你还在等什么&lt;/h2&gt;
&lt;p&gt;6 月上海文广集团（SMG）与阿里巴巴在上海联合宣布，双方将充分发挥各自在传媒与大数据领域的资源优势，共同将 SMG 旗下的第一财经传媒公司（以下简称“第一财经”），打造成具有全球影响力的新型数字化财经媒体与信息服务集团。&lt;/p&gt;

&lt;p&gt;没错，SMG 和阿里巴巴合作的产物之一这就是我们！&lt;/p&gt;
&lt;h2 id="我们的产品"&gt;我们的产品&lt;/h2&gt;
&lt;p&gt;我们在做一款财经 APP，这是结合第一财经媒体优势和阿里巴巴数据优势的顶尖 APP 产品。We aim for the best! 产品预计 9 月上线，现在加入的你，将成为我们团队的创始成员！&lt;/p&gt;
&lt;h2 id="平等、自由、尊重个人"&gt;平等、自由、尊重个人&lt;/h2&gt;
&lt;p&gt;我们不管种族、年龄、性别、性向、性取向、学历、信仰、家庭背景和职业经历那些无关紧要的东西，给予每一个应聘者同等的机会。团队采用扁平化管理，尽力创造平等的氛围。当然不仅体现在每个人在同样的环境中办公、享有同样的福利和着装等自由（对的，我们的工程师会抱着抱枕上班），更重要的是在讨论中，所有团队成员具有相同的表达机会，以论据的可靠而非职位的高低来确定最优方案。&lt;/p&gt;
&lt;h2 id="我们希望你是……"&gt;我们希望你是……&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2 年以上 Ruby 开发经验，1 年以上 Ruby on Rails 开发经验；&lt;/li&gt;
&lt;li&gt;有编写自动化测试用例的习惯；&lt;/li&gt;
&lt;li&gt;有扎实的编程功底，熟悉数据结构和算法；&lt;/li&gt;
&lt;li&gt;喜爱服务器后台编程；&lt;/li&gt;
&lt;li&gt;有过 Sinatra, Padrino 或 Grape 框架下的开发经验者优先；&lt;/li&gt;
&lt;li&gt;熟悉 redis, MongoDB 之类的 NoSQL 数据仓库者优先；&lt;/li&gt;
&lt;li&gt;理解框架运作原理者优先。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我们能提供给你的是……"&gt;我们能提供给你的是……&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有竞争力的薪酬待遇；&lt;/li&gt;
&lt;li&gt;SMG 食堂的准入资格；&lt;/li&gt;
&lt;li&gt;逢年过节的各种福利；&lt;/li&gt;
&lt;li&gt;弹性工作制由你安排；&lt;/li&gt;
&lt;li&gt;商业医疗保险；&lt;/li&gt;
&lt;li&gt;住房公积金；&lt;/li&gt;
&lt;li&gt;饭补等。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;工作地点：上海市南京西路 651 号广电大厦
如果你对该职位感兴趣，请把简历发至：zhangbaoyuan@yicai.com
                          联系方式：18501747987&lt;/p&gt;</description>
      <author>karloku</author>
      <pubDate>Tue, 19 May 2015 14:09:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/25639</link>
      <guid>https://ruby-china.org/topics/25639</guid>
    </item>
    <item>
      <title>[上海] 阿里巴巴与上海文广集团战略合作项目招收 Ruby 工程师</title>
      <description>&lt;h2 id="特色"&gt;特色&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;巨头联手：阿里巴巴与上海文广集团战略合作项目；&lt;/li&gt;
&lt;li&gt;精英团队：初始团队来源于阿里巴巴、上海文广集团等知名企业，各种大牛，扁平管理；&lt;/li&gt;
&lt;li&gt;全新项目：机制灵活、平台广阔、机会众多。&lt;/li&gt;
&lt;li&gt;许多妹子：我们的工作地点在上海文广集团南京西路总部里，你懂的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="招收岗位: Ruby 后台工程师"&gt;招收岗位：Ruby 后台工程师&lt;/h2&gt;&lt;h2 id="岗位描述"&gt;岗位描述&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;服务器后台开发&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="基本要求"&gt;基本要求&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2 年以上 Ruby 开发经验，1 年以上 Ruby on Rails 开发经验&lt;/li&gt;
&lt;li&gt;有编写自动化测试用例的习惯&lt;/li&gt;
&lt;li&gt;有扎实的编程功底，熟悉数据结构和算法&lt;/li&gt;
&lt;li&gt;喜爱服务器后台编程&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="加分项"&gt;加分项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有过 Sinatra, Padrino 或 Grape 框架下的开发经验&lt;/li&gt;
&lt;li&gt;熟悉 redis, MongoDB 之类的 NoSQL 数据仓库&lt;/li&gt;
&lt;li&gt;理解框架运作原理 &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="薪资"&gt;薪资&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;10K - 20K&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;简历请发至 qianyi.zc[ at ]alibaba-inc.com, 并注明来自 Ruby-China&lt;/p&gt;</description>
      <author>karloku</author>
      <pubDate>Fri, 27 Mar 2015 18:48:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/24870</link>
      <guid>https://ruby-china.org/topics/24870</guid>
    </item>
  </channel>
</rss>
