<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>wuwx</title>
    <link>https://ruby-china.org/wuwx</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Rails 应用 view 的选择顺序以及多模板程序的实现技巧</title>
      <description>&lt;h2 id="需求的介绍"&gt;需求的介绍&lt;/h2&gt;
&lt;p&gt;最近在写一个多租户的站群系统：&lt;a href="https://github.com/wuwx/MultiTenantCMS" rel="nofollow" target="_blank"&gt;https://github.com/wuwx/MultiTenantCMS&lt;/a&gt;，在单站点的 CMS 系统中，都会有很强烈的模板定制需求，在站群中，主站会托管很多二级网站，这些二级网站同样会有不同的模板定制需求，并且需要在多种模板之间能够灵活切换，我们对网站模板的切换，在 MVC 中架构，相当于提供了多种 View 层可供选择，选择不同的 View，就可以让数据以不同的方式展现出来&lt;/p&gt;
&lt;h2 id="Rails 对 View 的渲染"&gt;Rails 对 View 的渲染&lt;/h2&gt;
&lt;p&gt;在 Rails 应用中，view 层包含布局，视图，片段等，在一个默认应用中，这些 view 都会被保存在 apps/views 目录中，如果我们使用过 devise 等第三方 gem，会发现这些 gem 天生自带 view，并且默认不会侵入到 apps/views 目录中，但系统却可以很好地渲染，原因是 Rails 在搜索渲染的 view 并不单单在应用自身的 apps/views 目录内进行查找，他会在预先定义好的一个 view 目录的列表中进行挨个目录匹配，匹配到可用的视图，就可以进行渲染展现了。&lt;/p&gt;
&lt;h2 id="Rails 多模板的实现"&gt;Rails 多模板的实现&lt;/h2&gt;
&lt;p&gt;根据 Rails 对 View 渲染的顺序特点，我们就可以在 View 渲染之前，增加我们的风格路径&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;before_action&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="vi"&gt;@theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'flat-ui'&lt;/span&gt;
  &lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prepend_view_path&lt;/span&gt; &lt;span class="s2"&gt;"app/themes/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@theme&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/views"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样，我们就可以让 Rails 先去 flat-ui 目录去搜索是否有合适的可以渲染的 view，如果存在的话，就先渲染 flat-ui 下的 view，如果没有的话，就会回退到 app/views 下去查找。&lt;/p&gt;

&lt;p&gt;当然我们还可以再增加一点技巧，比如先让应用搜索 app/themes/flat-ui，再搜索 app/themes/default，最后才搜索 app/views&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;before_action&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="vi"&gt;@theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'flat-ui'&lt;/span&gt;
  &lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prepend_view_path&lt;/span&gt; &lt;span class="s2"&gt;"app/themes/default/views"&lt;/span&gt;
  &lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prepend_view_path&lt;/span&gt; &lt;span class="s2"&gt;"app/themes/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@theme&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/views"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="现成 gem 介绍"&gt;现成 gem 介绍&lt;/h2&gt;
&lt;p&gt;如果不愿意手动插代码，也有现成的 gem 支持这样多模板的选择，地址是：&lt;a href="https://rubygems.org/gems/themes_on_rails" rel="nofollow" target="_blank"&gt;https://rubygems.org/gems/themes_on_rails&lt;/a&gt;
具体功能和用法可以看官方的主页，这里就不再多做介绍了：）&lt;/p&gt;

&lt;p&gt;最后，期待大家对 &lt;a href="https://github.com/wuwx/MultiTenantCMS" rel="nofollow" target="_blank"&gt;https://github.com/wuwx/MultiTenantCMS&lt;/a&gt; 参与与关注：）&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Tue, 03 Nov 2015 08:55:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/27928</link>
      <guid>https://ruby-china.org/topics/27928</guid>
    </item>
    <item>
      <title>准备用 Rails 重头写一个支持多站点的 CMS 系统</title>
      <description>&lt;p&gt;1，大家有没有推荐现在比较好的支持多站点的 Rails CMS 让我参考参考
2，如果重头写一个算不算是又造了一个轮子
3，有没有有志同道合的朋友一起来搞搞这个东东，提交一些 issue 对我也是极大的支持~~&lt;/p&gt;

&lt;p&gt;简单滴说，求喷：&lt;a href="https://github.com/wuwx/MultiTenantCMS" rel="nofollow" target="_blank"&gt;https://github.com/wuwx/MultiTenantCMS&lt;/a&gt;&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sat, 24 Oct 2015 21:52:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/27812</link>
      <guid>https://ruby-china.org/topics/27812</guid>
    </item>
    <item>
      <title>请教 FactoryGirl 关联对象重复创建的问题</title>
      <description>&lt;p&gt;我们定义了三个模型 User =&amp;gt; Post =&amp;gt; Comment
我们对 User 模型验证 name 的唯一性，FactoryGirl 的定义如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;FactoryGirl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="c1"&gt;# user&lt;/span&gt;
  &lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="nb"&gt;name&lt;/span&gt; &lt;span class="s2"&gt;"User"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="c1"&gt;# post&lt;/span&gt;
  &lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:post&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="s2"&gt;"Title"&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="s2"&gt;"Content"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="c1"&gt;# comment&lt;/span&gt;
  &lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="ss"&gt;:comment&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;
    &lt;span class="n"&gt;post&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="s2"&gt;"Content"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结果当我们使用 &lt;code&gt;@comment = FactoryGirl.create(:comment)&lt;/code&gt; 创建一个新的 comment 的时候
就会提示 name 已经被使用过了&lt;/p&gt;

&lt;p&gt;应该是因为 user 被创建了两次的缘故，请问大家是如何解决这个问题的呢&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sat, 24 Oct 2015 19:01:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/27808</link>
      <guid>https://ruby-china.org/topics/27808</guid>
    </item>
    <item>
      <title>咨询一个 Ember.js 中如何正确地使用 Controller 实现 Decorate 效果</title>
      <description>&lt;p&gt;我用 rails + grape + carrierwave 搭建的一套 api，这套 api 的地址是 &lt;a href="http://www.xxxx.com/api" rel="nofollow" target="_blank" title=""&gt;www.xxxx.com/api&lt;/a&gt; 这个 api 中有一个字段是上来来的图片，输出来的的形式是：
{ "image_url": "/uploads/helloworld.gif" }&lt;/p&gt;

&lt;p&gt;然后我又尝试用 emberjs 1.13.8 搭建了一套前端界面，使用的域名是 m.xxxx.com，然后通过 RESTApi 的适配器获取 API 的数据，也就是说我需要把获取到的 image_url 加上真实的域名前缀，才能在 m.xxxx.com 下显示。&lt;/p&gt;

&lt;p&gt;起先我使用 emberjs 中的 ArrayController + ObjectController 把我需要的效果实现了，把 decorate 放在 ObjectController 里实现了，但是发现各种警告，说这样的用法 2.0 会被干掉。&lt;/p&gt;

&lt;p&gt;于是我就各种翻各种找，也没找到到底应该怎么实现才比较靠谱，我知道有一种办法是直接在 Route 里把数据给改了，不过我总觉得这么做很不好看，感觉怪不舒服的，所以想咨询下有没有能让人心旷神怡的实现方案。&lt;/p&gt;

&lt;p&gt;谢谢啦~~~~&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 17 Sep 2015 19:25:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/27379</link>
      <guid>https://ruby-china.org/topics/27379</guid>
    </item>
    <item>
      <title>Rails 4.2.4 来了</title>
      <description>&lt;p&gt;小伙伴们可以更新一下 Gemfile 文件啦~~~~&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Tue, 25 Aug 2015 16:52:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/27075</link>
      <guid>https://ruby-china.org/topics/27075</guid>
    </item>
    <item>
      <title>Ember.js 2.0 正式发布，移除 1.13 废弃的特性</title>
      <description>&lt;p&gt;&lt;a href="http://www.oschina.net/news/65175/ember-js-2-0-0" rel="nofollow" target="_blank"&gt;http://www.oschina.net/news/65175/ember-js-2-0-0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.com/builds/#/release" rel="nofollow" target="_blank"&gt;http://emberjs.com/builds/#/release&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;好像很值得激动人心的样子呢……&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 13 Aug 2015 22:32:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/26918</link>
      <guid>https://ruby-china.org/topics/26918</guid>
    </item>
    <item>
      <title>求教 Rails 取消订单需要填说明的实践</title>
      <description>&lt;p&gt;大概描述下我目前的情况，Order 订单模型，使用 state_machine 定义了一个 cancel 的 event
在 orders 控制器里，使用了一个 cancel 的方法，对应 put /orders/cancel 去调用他
也就是说暴露出来的 router 跟 cancel 有关的只有 cancel 一个
之前都是直接使用一个链接，直接指定 :method =&amp;gt; :put
现在增加了一个需求，就是希望用户在取消订单的时候，还得输入为什么要取消订单的理由：）
这种情况下应该怎么设计比较好呢？
把输入页面设置为 get /orders/cancel，提交页面设置为 put /orders/cancel
还是输入页面直接放在 order 的 show 页面或者其他 js 方式弹出？
谢谢大家：）&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sun, 02 Aug 2015 11:00:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/26732</link>
      <guid>https://ruby-china.org/topics/26732</guid>
    </item>
    <item>
      <title>ActiveRecord 是否可以使用一个 Model 操作 2 个数据表</title>
      <description>&lt;p&gt;一个数据表名为：forum_forum
另一个表名为：forum_forumfield&lt;/p&gt;

&lt;p&gt;他们之间其实是 has_one 与 belongs_to 的关系&lt;/p&gt;

&lt;p&gt;我只想启用一个 Forum Model，不想再引入一个 ForumField Model
想直接使用一个 Forum Model 来进行读写操作
不知道是否靠谱，求支援……&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 30 Apr 2015 21:05:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/25390</link>
      <guid>https://ruby-china.org/topics/25390</guid>
    </item>
    <item>
      <title>大家有没有好的在 Rails 里用的 UBB Gem 推荐推荐</title>
      <description>&lt;p&gt;大概情况是这么个样子的，最近想给一个 Discuz!X 的论坛增加一些功能，想用 Rails 显示帖子的内容，也就是说两个系统需要共同运行。
Discuz 的内容是 UBB 的，不是 Markdown，所以想找一款解析 UBB 比较灵活的 Gem 套进去解析帖子内容，找了一圈也没有找到想要的。
大家有没有推荐一些解析 UBB 的 GEM，最好能配置个参数自己要解析成什么模样的就完美了，先谢谢啦。&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 30 Apr 2015 11:17:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/25380</link>
      <guid>https://ruby-china.org/topics/25380</guid>
    </item>
    <item>
      <title>请教有没有这样的项目介绍介绍</title>
      <description>&lt;p&gt;具体需求是这样的：&lt;/p&gt;

&lt;p&gt;有一个前端机有一个公网 IP，后端有一堆服务分散在内部网络里
这一堆服务是由不同的同事自己开发与维护，对外访问的时候使用域名&lt;/p&gt;

&lt;p&gt;&lt;a href="http://domain/service1/" rel="nofollow" target="_blank"&gt;http://domain/service1/&lt;/a&gt;
&lt;a href="http://domain/service2/" rel="nofollow" target="_blank"&gt;http://domain/service2/&lt;/a&gt;
&lt;a href="http://domain/service3/" rel="nofollow" target="_blank"&gt;http://domain/service3/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这种形式访问，目前使用的方式是通过 nginx proxy_pass 配置的&lt;/p&gt;

&lt;p&gt;location /service1/ {
    proxy_pass &lt;a href="http://192.168.1.1" rel="nofollow" target="_blank"&gt;http://192.168.1.1&lt;/a&gt;
}
location /service2/ {
    proxy_pass &lt;a href="http://192.168.1.2" rel="nofollow" target="_blank"&gt;http://192.168.1.2&lt;/a&gt;
}
location /service3/ {
    proxy_pass &lt;a href="http://192.168.1.3" rel="nofollow" target="_blank"&gt;http://192.168.1.3&lt;/a&gt;
}&lt;/p&gt;

&lt;p&gt;也就是说，增加或撤销一个服务，都需要前端的管理员到服务器重新配置一下 nginx
有没有哪种靠谱的方案可实现开发与维护服务的同事自己进行服务添加
谢谢大家~~~&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sun, 06 Jul 2014 12:55:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/20340</link>
      <guid>https://ruby-china.org/topics/20340</guid>
    </item>
    <item>
      <title>咨询一个整理版本树有关的问题</title>
      <description>&lt;p&gt;我目前提交的代码库有点类似这种结构的，C2 和 C3 有两次 merge 到 master 的记录&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/2ebb9ded54062a3d26e66a115ac860ac.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我想把 C2 和 C3 2 次 merge 合并到一次 merge 里，变成下面这种图的样式&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/7bdef6dffba7ea7f5f8d735073a7831f.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;而 C3' 后面可能还有一些提交存在，我还不想改变 C3 后面的图结构，可以忍受 commit-id 改变
但我希望还是保留中间的 merge 关系，大家一般都怎么操作呢？&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sun, 18 May 2014 19:39:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/19358</link>
      <guid>https://ruby-china.org/topics/19358</guid>
    </item>
    <item>
      <title>求教哪款所见所得编辑器比较适合与 Rails 结合在一起用？ </title>
      <description>&lt;p&gt;感觉选择有点多有点迷茫啊！&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 01 May 2014 17:17:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/18953</link>
      <guid>https://ruby-china.org/topics/18953</guid>
    </item>
    <item>
      <title>大家帮忙分析判断下从身份证中获取生日的写法的这段代码</title>
      <description>&lt;p&gt;假设 User 模型，有一个 id_number 记录用户的身份证号码，这个字段的值就有可能是 nil, "", 以及其他字符串，我刚开始的代码是这么写的：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"19"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&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;代码华丽丽地异常了，原因是因为部分记录是 nil 没有 length 这个方法，于是开始动手改吧&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"19"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&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;这么写代码好像是可以工作了，不过有种便秘似的说不出的不悦……继续换个写法&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blank?&lt;/span&gt;
&lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"19"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&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;看上去少了一些，不过看着第一个空的 if，又有一种被灌翔了的感觉&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"19"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&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;这样看上去貌似靠谱一点点了有木有，不过感觉还是有很大的空间呢？&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;birthday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;
    &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="s2"&gt;"19"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;"unknown"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;好了，最终我的代码是像上面那么些的，大家帮忙看看靠谱不靠谱呢？或者有更好更 ruby 的写法木有的？&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 20 Feb 2014 10:00:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/17364</link>
      <guid>https://ruby-china.org/topics/17364</guid>
    </item>
    <item>
      <title>咨询一个 API 批量操作的问题</title>
      <description>&lt;p&gt;更新的是一个 users 表，api 地址是 /api/users 当然这都不是重点
假设 users 表里有 2 个字段，一个是 login，一个是 name，设置 validates :login, uniqueness: true
也就是说，通过 api 批量 POST 到 /api/users 的话，如果 login 是重复的，就会出现错误
就会给一个错误提示：format.json { render json: &lt;a href="/user.errors" class="user-mention" title="@user.errors"&gt;&lt;i&gt;@&lt;/i&gt;user.errors&lt;/a&gt;, status: :unprocessable_user }&lt;/p&gt;

&lt;p&gt;但是感觉这里有个不那么性感的地方，想增加一个用户，但是又被系统提示为重复，然后又不知道到底谁跟他重复了
因为如果系统已经有这个用户的了，还期望看看这个用户的资料是否需要更新（不是绝对需要更新）&lt;/p&gt;

&lt;p&gt;或者 GET /api/users 增加 login 参数来返回搜索到的这个用户？然后再根据 ID 来更新么？&lt;/p&gt;

&lt;p&gt;或者大家有什么别的性感又曼妙的方案么？&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sat, 15 Feb 2014 20:30:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/17285</link>
      <guid>https://ruby-china.org/topics/17285</guid>
    </item>
    <item>
      <title>Grape 有什么办法一次性更新所有参数？</title>
      <description>&lt;p&gt;1，希望 post 的时候可以直接调用&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@topic = Topic.new(params)
@topic.save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种方式直接一次性地提交&lt;/p&gt;

&lt;p&gt;2，希望 put 的时候也可以比较方便地更新&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@topic = Topic.find(params[:id])
@topic.update(entry_params)
@topic.save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前是一个字段 一个字段地更新，还得写一堆 if 语句判断这个字段有没有被设置
假如某些字段没有设置的话，而强制更新就可能原来有值后来变成 null 了&lt;/p&gt;

&lt;p&gt;大家都是怎么解决这个问题的哇？&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 13 Feb 2014 08:06:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/17214</link>
      <guid>https://ruby-china.org/topics/17214</guid>
    </item>
    <item>
      <title>大家的 root_controller 都用什么名字哇</title>
      <description>&lt;p&gt;pages_controller ?
welcome_controller ?
dashboard_controller ?
dashboards_controller ?&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sat, 08 Feb 2014 08:01:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/17109</link>
      <guid>https://ruby-china.org/topics/17109</guid>
    </item>
    <item>
      <title>有木有同学使用过 carrierwave + grape 构造文件上传 api 的</title>
      <description>&lt;p&gt;我弄了一个，结果怎么都传不上去文件，很痛苦啊&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
  &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;photo&lt;/span&gt; &lt;span class="o"&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;:photo&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;photo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encodestring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;default.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filename&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;default.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后用 python 送了个 photo 字段过去了……&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Thu, 23 Jan 2014 11:58:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/16942</link>
      <guid>https://ruby-china.org/topics/16942</guid>
    </item>
    <item>
      <title>咨询一个 Api 提交数据的格式问题</title>
      <description>&lt;p&gt;假如建立一个 api 服务器：&lt;a href="http://localhost:3000/api/users" rel="nofollow" target="_blank"&gt;http://localhost:3000/api/users&lt;/a&gt;
如果你想新建一条记录，就 POST 到这个地址&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hahaha&lt;/span&gt;
    &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hahaha&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不过有个小疑问，这种结构下没有最外层的 user 结构，按我的理解 rails 构造的 api 是否应该提交这样的数据更好点？&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hahaha&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hahaha&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就可以通过 params[:user] 直接全取出来了，new 的时候也方便呀&lt;/p&gt;

&lt;p&gt;假如需要 form_for :remote =&amp;gt; true 的时候这个 api 不就也能用了么？&lt;/p&gt;

&lt;p&gt;可是我看到 twitter 的 api 和 github 的 api 都是第一种形式，也就是没有外面那层的 user&lt;/p&gt;

&lt;p&gt;是否可以解释下第一种有什么好处么？&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Sun, 19 Jan 2014 20:20:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/16871</link>
      <guid>https://ruby-china.org/topics/16871</guid>
    </item>
    <item>
      <title>Rails 项目中针对 select 或 radio 值变化显示不同的 input</title>
      <description>&lt;p&gt;需求就是用户先选择自己的身份：教工、学生
如果是教工就要求输入工资号，身份证号码
如果是学生就要求输入学生证号，身份证号码&lt;/p&gt;

&lt;p&gt;并且如果是教工的话，所属部门就可以工作相关的部门
如果是学生的话，所属部门就只能选择学院相关&lt;/p&gt;

&lt;p&gt;有点类似省市地的三级菜单&lt;/p&gt;

&lt;p&gt;假如是 Rails 项目，用 simple_form，请问用什么样的 js 解决方案比较好？人肉写代码？还是用前端 MVC？&lt;/p&gt;

&lt;p&gt;大家都是如何处理这样的问题的呢？&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Fri, 17 Jan 2014 21:59:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/16855</link>
      <guid>https://ruby-china.org/topics/16855</guid>
    </item>
    <item>
      <title>Rails 生成的部分路由里，如何强制加斜杠呢</title>
      <description>&lt;p&gt;例如主题列表的链接是&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ruby-china.org/topics/" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;但对于 new 操作就不用加了，希望是&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ruby-china.org/topics/new" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/new&lt;/a&gt;&lt;/p&gt;</description>
      <author>wuwx</author>
      <pubDate>Tue, 08 Oct 2013 10:16:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/14576</link>
      <guid>https://ruby-china.org/topics/14576</guid>
    </item>
  </channel>
</rss>
