<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>mfb777</title>
    <link>https://ruby-china.org/mfb777</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>T-Ruby, TypeScript-style types for Ruby language</title>
      <description>&lt;p&gt;&lt;a href="https://type-ruby.github.io/" rel="nofollow" target="_blank"&gt;https://type-ruby.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;name: &lt;/span&gt;&lt;span class="no"&gt;String&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="no"&gt;String&lt;/span&gt;
  &lt;span class="s2"&gt;"Hello, &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编写带类型的 .trb 文件，编译生成 .rb 和 .rbs 文件。&lt;/p&gt;

&lt;p&gt;Sorbet 太丑陋，rbs 文件又太繁琐。T-Ruby 这个方式个人感觉是比较优雅的，具体用起来有什么坑还不清楚，感觉问题不大。&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Wed, 21 Jan 2026 22:04:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/44460</link>
      <guid>https://ruby-china.org/topics/44460</guid>
    </item>
    <item>
      <title>好消息：RubyMine 现在对非商业用途免费</title>
      <description>&lt;p&gt;官方公告：&lt;a href="https://blog.jetbrains.com/zh-hans/ruby/2025/09/rubymine-is-now-free-for-non-commercial-use/" rel="nofollow" target="_blank"&gt;https://blog.jetbrains.com/zh-hans/ruby/2025/09/rubymine-is-now-free-for-non-commercial-use/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;配套一个视频使用教程：&lt;a href="https://www.driftingruby.com/episodes/rubymine" rel="nofollow" target="_blank"&gt;https://www.driftingruby.com/episodes/rubymine&lt;/a&gt;&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Tue, 09 Sep 2025 22:13:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/44306</link>
      <guid>https://ruby-china.org/topics/44306</guid>
    </item>
    <item>
      <title>Rails 前端方案 Inertia.js</title>
      <description>&lt;p&gt;最近发现 X 上这个框架推文比较多，就大概了解了一下。发现这个框架很适合 Rails。&lt;/p&gt;

&lt;p&gt;Rails adapter for Inertia.js 项目地址：&lt;a href="https://github.com/inertiajs/inertia-rails" rel="nofollow" target="_blank"&gt;https://github.com/inertiajs/inertia-rails&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;目前还没有使用过，但能看出来使用 Inertia.js 可以比较好的和前端技术融合起来，React, Vue, and Svelte 都是默认支持的。&lt;/p&gt;

&lt;p&gt;Rails 7 给的 Hotwire 方案看起来很美，用起来生态匮乏，没有太多的轮子可以用。Inertia 背后好像有 Laravel 的官方支持，感觉 PHP 又能焕发一波了。&lt;/p&gt;

&lt;p&gt;有没有大佬已经在项目中用过了？性能如何，是否有坑？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Sun, 12 Jan 2025 01:59:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/44016</link>
      <guid>https://ruby-china.org/topics/44016</guid>
    </item>
    <item>
      <title>DHH 新推出一个 Web Server：Thruster</title>
      <description>&lt;p&gt;据他说是会用在 Rails 8 上，配合 Kamal 2。如此看来，如果 Rails 7 是在前端部分做了革新，那 Rails 8 可能要在部署方面有大变化。&lt;/p&gt;

&lt;p&gt;Thruster 设计初衷是为了方便打包 Rails 项目用于交付客户。看过项目介绍暂时没感觉到这个东西的必要性，Rails 部署确实有些复杂，但是用了这个真的能减少复杂性吗？看介绍说只是解决了 SSL，Nginx 等问题，感觉没有抓住痛点。解决这些问题，用 Nginx + CF 好像也没那么复杂？部署真正繁琐的应该是坏境变量、bundle、assets 编译、Action Cable 等这些环节。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP/2 support&lt;/li&gt;
&lt;li&gt;SSL (via Let’s Encrypt, for automatic certificate management)&lt;/li&gt;
&lt;li&gt;HTTP caching, for public assets&lt;/li&gt;
&lt;li&gt;Efficient static file serving via X-Sendfile and compression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;好处是这个项目是用 Go 编写的，性能应该还行。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/dhh/status/1765821210108088490?s=20" rel="nofollow" target="_blank"&gt;https://x.com/dhh/status/1765821210108088490?s=20&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.37signals.com/thruster-released/" rel="nofollow" target="_blank"&gt;https://dev.37signals.com/thruster-released/&lt;/a&gt;&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Sun, 10 Mar 2024 13:36:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/43623</link>
      <guid>https://ruby-china.org/topics/43623</guid>
    </item>
    <item>
      <title>如何能避免在路由中反复引入 concerns</title>
      <description>&lt;p&gt;比如如下代码&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# config/routes.rb&lt;/span&gt;
&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;draw&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;

  &lt;span class="n"&gt;concern&lt;/span&gt; &lt;span class="ss"&gt;:searchable&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="ss"&gt;:search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;on: :collection&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="ss"&gt;:admin&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;resources&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;concerns: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:searchable&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:comments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;concerns: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:searchable&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:tags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;concerns: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:searchable&lt;/span&gt;&lt;span class="p"&gt;]&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;有很多个相同的结构，使用什么办法能不需要每次都写那个 concerns: [:searchable]&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Tue, 08 Mar 2022 16:56:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/42193</link>
      <guid>https://ruby-china.org/topics/42193</guid>
    </item>
    <item>
      <title>网站业务前台和管理后台写在一起有什么弊端？</title>
      <description>&lt;p&gt;比如电商网站，如果会员下单的系统和员工用的业务系统都在一个 Rails APP 里，就算可以在路由方面做一些限制，总感觉存在严重的安全隐患。而且这两种需求面向的是两种完全不同用户，对性能要求也完全不同，所以感觉隔离开更好。&lt;/p&gt;

&lt;p&gt;如果用 API 做后端，工作量和架构复杂性至少成倍增加。&lt;/p&gt;

&lt;p&gt;如果要使用 Rails，并且共用一套数据库，中小型业务场景下，有没有比较主流稳妥的解决方案？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Sun, 14 Feb 2021 11:58:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/40913</link>
      <guid>https://ruby-china.org/topics/40913</guid>
    </item>
    <item>
      <title>CSV 文件如何做一个类似合并单元格的操作</title>
      <description>&lt;p&gt;比如有这样的一个 CSV 文件：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/f7c2c587-f828-4134-8c74-31bf5341da4d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;有什么比较优雅的方法可以变成这样：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1223&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12343&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;122XX33&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;678&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;612378&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;67XX8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1000&lt;/span&gt;&lt;span class="dl"&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;</description>
      <author>mfb777</author>
      <pubDate>Wed, 12 Sep 2018 22:13:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/37479</link>
      <guid>https://ruby-china.org/topics/37479</guid>
    </item>
    <item>
      <title>Macbook 下的 Vim 的 Ctrl 键很不好按</title>
      <description>&lt;p&gt;如何解决这一问题？&lt;/p&gt;

&lt;p&gt;尝试映射到 caps lock 键位，不过看着那个按键上的指示灯一亮一灭的，总觉得心里不舒服。&lt;/p&gt;

&lt;p&gt;是否有其他的解决方法？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Tue, 14 Apr 2015 01:10:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/25129</link>
      <guid>https://ruby-china.org/topics/25129</guid>
    </item>
    <item>
      <title>开始项目的时候，首先从哪里下手？</title>
      <description>&lt;p&gt;是从规划数据库里的每一个表开始，还是先规划好有几个页面，每个页面有哪些功能开始？&lt;/p&gt;

&lt;p&gt;直接 rails new app 以后，紧接着是构建 model，还是着手写 controller，或者是从 view 开始？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Thu, 07 Mar 2013 16:26:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/9220</link>
      <guid>https://ruby-china.org/topics/9220</guid>
    </item>
    <item>
      <title>断行与缩进的困惑</title>
      <description>&lt;p&gt;用 Ruby 一不小心就写得超过 80 个字符了。
有时候觉得太长了很难看，但是缩进的时候许多情况会不知道如何处理。&lt;/p&gt;

&lt;p&gt;比如，复杂的 Hash&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rows&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="n"&gt;row&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;data_rows&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="ss"&gt;:v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Date(&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'%Y,%m,%d,%H,%m,%S'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="ss"&gt;:v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;price&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;p&gt;还有类似这样的，某一个参数很长：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"`price` != 0 and `from` = ? and `to` = ? and balabala"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再有诸如可以一连串方法的，是否有必要专门多写几行？&lt;/p&gt;

&lt;p&gt;&lt;code&gt;price = doc.css("div#Market1BestPrice").first.inner_text.match(/(:?\d+,)?\d+\.\d+/)[0].gsub(',', '')
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;关于缩进与断行，最好是一直刻意遵守，还是哪些情况可以不去考虑？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Tue, 22 Jan 2013 11:56:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/8256</link>
      <guid>https://ruby-china.org/topics/8256</guid>
    </item>
    <item>
      <title>有人会把 Ruby 默念成 [ˈrʌbi] 吗？</title>
      <description>&lt;p&gt;虽然知道不应该这么念，但是总不想改，觉得 [ˈrubi] 好难听啊！&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Mon, 19 Nov 2012 15:59:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/6902</link>
      <guid>https://ruby-china.org/topics/6902</guid>
    </item>
    <item>
      <title>关于取子字符串问题</title>
      <description>&lt;p&gt;&lt;code&gt;"a,b,c,d".scan(/,\w,/)  # =&amp;gt; [",b,"]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;怎样能取到两边都有逗号的值 &lt;code&gt;[",b,",",c,"]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;字符串可能的类似形式有&lt;/p&gt;

&lt;p&gt;"a"
“a,b,c"
"a,b,c,d"
"a,b,c,d,e"
...&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Mon, 12 Nov 2012 17:36:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/6705</link>
      <guid>https://ruby-china.org/topics/6705</guid>
    </item>
    <item>
      <title>怎样平行赋值初始化数组？</title>
      <description>&lt;p&gt;现在不得不这样：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;a1, a2, a3 ,a4 = [], [] ,[], []&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;有什么办法更简单一些？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Wed, 07 Nov 2012 12:30:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/6589</link>
      <guid>https://ruby-china.org/topics/6589</guid>
    </item>
    <item>
      <title>Ruby 文档里的 option 项去哪里看？</title>
      <description>&lt;p&gt;比如这样的：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;foreach(path, options = Hash.new, &amp;amp;block)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;怎样知道支持哪些 option？&lt;/p&gt;</description>
      <author>mfb777</author>
      <pubDate>Sat, 06 Oct 2012 04:18:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/5891</link>
      <guid>https://ruby-china.org/topics/5891</guid>
    </item>
  </channel>
</rss>
