<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>syutran (许中川)</title>
    <link>https://ruby-china.org/syutran</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>rails 7 如何连接 ibm_db DB2 数据库？</title>
      <description>&lt;p&gt;呆了好久......&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rails new demo -d ibm_db&lt;/code&gt; 会报 database 的错误，意思是没有 ibm_db 的相关驱动，意思是不支持 db2 数据库。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1、GO 过了，说是要在 activerecord.rb 里添加 ibm_db 的选项。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;但我在 gems 的 activerecord 7.0.* 里就没找到可以添加的位置。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2, gem install ibm_db&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这是安装 ibm_db 的 gem，不解决 &lt;code&gt;rails new demo -d ibm_db&lt;/code&gt; 的问题。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3、IBM 官网说法&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;卸载当前的 ibm_db，去客户端的 libsql/lib 下去 gem install 一个 ibm_db，当然这个更老。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4、ibm_db 的主页&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ibm_db 5.2.0 最高支持 6.0.x&lt;/p&gt;

&lt;p&gt;rails 7 不支持 DB2 数据库 ?&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Wed, 23 Mar 2022 11:53:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/42250</link>
      <guid>https://ruby-china.org/topics/42250</guid>
    </item>
    <item>
      <title>我不知道如何把一个 js 模块引入到 importmap 里，帮帮忙吧~</title>
      <description>&lt;p&gt;说好不用 jquery，就坚决不用 jquery。&lt;/p&gt;

&lt;p&gt;dabeng/orgchart.js 是这个的：&lt;a href="https://github.com/dabeng/OrgChart.js/blob/master/src/orgchart.js" rel="nofollow" target="_blank"&gt;https://github.com/dabeng/OrgChart.js/blob/master/src/orgchart.js&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrgChart&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OrgChart&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;P&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nx"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;then&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="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;that&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;defaultOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那该用 importmaps 怎么引用呢？&lt;/p&gt;

&lt;p&gt;无论我使用 &lt;code&gt;pin_from_all "app/javascript/src/orgchart.js"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;还是 在 application.js 中 &lt;code&gt;import "./src/orgchart"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;都无法使用它。&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chart-container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nx"&gt;abcd&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;datascource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&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="s1"&gt;Lao Lao&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="s1"&gt;title&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="s1"&gt;general manager&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="s1"&gt;children&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="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&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="s1"&gt;Bo Miao&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;name&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="s1"&gt;Su Miao&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;children&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="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&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="s1"&gt;Tie Hua&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="s1"&gt;title&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="s1"&gt;senior engineer&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="s1"&gt;name&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="s1"&gt;Hei Hei&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="s1"&gt;title&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="s1"&gt;senior engineer&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="s1"&gt;children&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="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&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="s1"&gt;Pang Pang&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="s1"&gt;title&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="s1"&gt;engineer&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="s1"&gt;name&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="s1"&gt;Xiang Xiang&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="s1"&gt;title&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="s1"&gt;UE engineer&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="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&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="s1"&gt;name&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="s1"&gt;Yu Jie&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;name&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="s1"&gt;Yu Li&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;name&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="s1"&gt;Hong Miao&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;name&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="s1"&gt;Yu Wei&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;name&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="s1"&gt;Chun Miao&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="s1"&gt;title&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="s1"&gt;department manager&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="s1"&gt;name&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="s1"&gt;Yu Tie&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="s1"&gt;title&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="s1"&gt;department manager&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="p"&gt;},&lt;/span&gt;
&lt;span class="nx"&gt;orgchart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OrgChart&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chartContainer&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="s1"&gt;#chart-container&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="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;datascource&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;depth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nodeContent&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="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一直报错：&lt;code&gt;Uncaught ReferenceError: OrgChart is not defined&lt;/code&gt; 。&lt;/p&gt;
&lt;h3 id="求大佬 给指点一下，使用 importmaps 作为 rails 的 js ，如何引入 ES6 模块，我的问题出在哪儿呢？"&gt;求大佬 给指点一下，使用 importmaps 作为 rails 的 js，如何引入 ES6 模块，我的问题出在哪儿呢？&lt;/h3&gt;
&lt;p&gt;如果直接在页面里引用，把模块里的 &lt;code&gt;export default&lt;/code&gt;删除，就能用了。&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://192.168.3.136:3000/orgchart.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="nx"&gt;把&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;删除&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="nx"&gt;是没问题的&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="nx"&gt;正常能用&lt;/span&gt;&lt;span class="err"&gt;。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="尝试过的方法："&gt;尝试过的方法：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;import { orgchart } from "./src/orgchart"&lt;/li&gt;
&lt;li&gt;import orgchart from "./src/orgchart"&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>syutran</author>
      <pubDate>Wed, 05 Jan 2022 08:44:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/42055</link>
      <guid>https://ruby-china.org/topics/42055</guid>
    </item>
    <item>
      <title>Rails 7 --css bootstrap 报错问题的解决方法</title>
      <description>&lt;p&gt;Rails 7 使用 tailwindcss 没问题，使用 bootstrap 有个小 bug。&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;rails&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;blog&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt; &lt;span class="nx"&gt;bootstrap&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;启动服务后&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="nx"&gt;报&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;
&lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;asset&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;present&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;asset&lt;/span&gt; &lt;span class="nx"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="nx"&gt;和&lt;/span&gt;
&lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;asset&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;present&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;asset&lt;/span&gt; &lt;span class="nx"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这两个错是分别报的。&lt;/p&gt;

&lt;p&gt;解决方法：需要在 package.json 插入编译代码：&lt;/p&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;文件&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@hotwired/stimulus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@hotwired/turbo-rails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^7.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@popperjs/core"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.11.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bootstrap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^5.1.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"esbuild"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^0.14.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sass"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.45.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbuild app/javascript/*.* --bundle --outdir=app/assets/builds"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build:css"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sass ./app/assets/stylesheets/application.bootstrap.scss ./app/assets/build/application.css --no-source-map --load-path=node_modules"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用命令行编译：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn build
# 生成 app/assset/builds/application.js 
#application.html.erb 中 include_tag 找的就是这个文件
yarn build:css
# 生成 app/assets/build/application.css 
# application.html.erb 中 link_tag 找的就是这个文件

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不然，会报找不到这两个文件的错。&lt;/p&gt;

&lt;p&gt;在 Procfile.dev 里是有这两行命令，但 new 脚本没有把 scripts 写到 package.json 里去。&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Sun, 19 Dec 2021 16:02:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/42013</link>
      <guid>https://ruby-china.org/topics/42013</guid>
    </item>
    <item>
      <title>hotwire-stimulus 的三级关联 form.select 的疑问</title>
      <description>&lt;h2 id="hotwire-stimulus 的三级关联 form.select 的 change 不级联"&gt;hotwire-stimulus 的三级关联 form.select 的 change 不级联&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我用 &lt;code&gt;hotwire&lt;/code&gt; 做了个三级关联 &lt;code&gt;form-select&lt;/code&gt;，第一个 &lt;code&gt;select&lt;/code&gt; 点选后，第二个 &lt;code&gt;select&lt;/code&gt; 是随第一个内容变动，但是第三个 &lt;code&gt;select&lt;/code&gt; 却不随第二个 &lt;code&gt;select&lt;/code&gt; 的变动而变动。需要用鼠标点选第二个并有所改变，第三个才会响应。看样子 &lt;code&gt;stimulus&lt;/code&gt; 的 &lt;code&gt;controller action&lt;/code&gt; 中的 &lt;code&gt;change&lt;/code&gt;  有问题，用鼠标 change 的算 change，用代码 change 的不算 change。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="上代码"&gt;上代码&lt;/h3&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;manager_controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@rails/request.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="o"&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;branchSelect&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;roleSelect&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="nf"&gt;change&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;manager&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectedOptions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;branchSelectTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
        &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/separations/manager_branches?target=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;manager=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;manager&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;responseKind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turbo-stream&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="nf"&gt;changebranch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;manager&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectedOptions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;你到底动还是不动？&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form_with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;model: &lt;/span&gt;&lt;span class="vi"&gt;@ngcms_rbac_user_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;local: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&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;form&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"data-controller"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"manager"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;col&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt; &lt;span class="ss"&gt;:manager&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;NgcmsRbacUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;prompt: &lt;/span&gt;&lt;span class="s2"&gt;"select a manager"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s2"&gt;"form-select"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;action: &lt;/span&gt;&lt;span class="s2"&gt;"change-&amp;gt;manager#change"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html_safe&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;col&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt; &lt;span class="ss"&gt;:branch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],{&lt;/span&gt; &lt;span class="ss"&gt;prompt: &lt;/span&gt;&lt;span class="s2"&gt;"请选择单位"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s2"&gt;"form-select"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;manager_target: &lt;/span&gt;&lt;span class="s2"&gt;"branchSelect"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;action: &lt;/span&gt;&lt;span class="s2"&gt;"change-&amp;gt;manager#changebranch"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html_safe&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;col&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt; &lt;span class="ss"&gt;:role&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;prompt: &lt;/span&gt;&lt;span class="s2"&gt;"请选择岗位"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s2"&gt;"form-select"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;branch_target: &lt;/span&gt;&lt;span class="s2"&gt;"roleSelect"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;row&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;col&lt;/span&gt;
        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="业务场景"&gt;业务场景&lt;/h3&gt;
&lt;p&gt;某客户经理，在不同的分支机构都有不同的业务（业务中的角色也不同，A 岗，B 岗，管理岗等等），目标是把这个客户经理的在某个机构的部分业务转让给另一个客户经理，所以，先选择 客户经理，根据客户经理所在的某个分支机构，再选要转让的角色。&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Tue, 07 Dec 2021 14:38:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/41953</link>
      <guid>https://ruby-china.org/topics/41953</guid>
    </item>
    <item>
      <title>刚从 node 那边回来</title>
      <description>&lt;p&gt;向组织汇报一下近期思想动态：&lt;/p&gt;

&lt;p&gt;听说 react 很火，老想抓住这条大鱼，B 站补了几天 react 的课，发现自己 js 基础太差。&lt;/p&gt;

&lt;p&gt;于是再去补 js 的课，确实学了不少基础的知识，var 自动前置，func 也是对象，-&amp;gt; 头函数， ...arr，...&lt;/p&gt;

&lt;p&gt;于是再去 react 那看看能不能顺畅些，又发现还得补 node，ES6，fastify。&lt;/p&gt;

&lt;p&gt;最后发现它们前后端分离太麻烦，每走一步就想念我的 ROR，&lt;/p&gt;

&lt;p&gt;NND，还是回来吧，太 TM 累~&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Mon, 06 Sep 2021 11:55:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/41657</link>
      <guid>https://ruby-china.org/topics/41657</guid>
    </item>
    <item>
      <title>ActiveRecord_Relation 没有实例化</title>
      <description>&lt;p&gt;我相对查询出来的数据集重新排序，才发现数据集并没有实例化，而是一条 SQL 查询。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@people = Person.where( alive: true )

# 如果你能看懂 @people = Person.find(1).root.subtree(to_depth: 10) 你就知道为什么要重新排序而不在抓数据时就排好序

@people.order( :name ) 我想重排序，白搭，没这个方法

@people.insert([name: " Tom ", ... ]) 

白搭，不知道这个 ActiveRecord_Relation 是个什么鬼 ，如果是个查询结果集，为什么不让插入数据？

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后来发现，&lt;a href="/people.each" class="user-mention" title="@people.each"&gt;&lt;i&gt;@&lt;/i&gt;people.each&lt;/a&gt; 时，也会一条一条地从数据库里重新抓数据，WC~&lt;/p&gt;

&lt;p&gt;现在我想在结果集里插入数据，不想搞临时表什么的，我也想把结果集重新排序，我有什么办法吗？&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Sun, 21 Mar 2021 12:48:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/41053</link>
      <guid>https://ruby-china.org/topics/41053</guid>
    </item>
    <item>
      <title>能不能在 view 里调用 rake tasks ？</title>
      <description>&lt;p&gt;我写了个数据检查的 task，每隔几天要检查一下数据的完整性，兼做一些其它的活。但我不想每次都登录后台 rails check:data，我想把它加到 view 里去执行，做个按钮什么的。有没有办法？&lt;/p&gt;

&lt;p&gt;大 G 小度都没搜到~&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Mon, 01 Mar 2021 21:18:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/40977</link>
      <guid>https://ruby-china.org/topics/40977</guid>
    </item>
    <item>
      <title>6.1 是不是无法完全脱离 assets ?</title>
      <description>&lt;p&gt;我把应用从 5.2 升级到 6.1，把 js 和 scss 移到 javascript/pack 下。原来的 assets 下保留 config/manifest.js (如果把这个删除，程序会报错。)&lt;/p&gt;

&lt;p&gt;如果把 manifest.js 的内容删除，也会报错。&lt;/p&gt;

&lt;p&gt;我查了一些资料，很少有讲到项目使用 webpack 以后，如何脱离 assets 目录。不该两线作战。&lt;/p&gt;

&lt;p&gt;现在，我的项目，application.js 文件已经 3.5M 大了，首次打开页面要 1 分钟时间。&lt;/p&gt;
&lt;h3 id="删除 assets 目录，启动 puma 报错"&gt;删除 assets 目录，启动 puma 报错&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Expected to find a manifest file in &lt;code&gt;app/assets/config/manifest.js&lt;/code&gt; (Sprockets::Railtie::ManifestNeededError)
But did not, please create this file and use it to link any assets that need
to be rendered by your app:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
  //= link_tree ../images
  //= link_directory ../javascripts .js
  //= link_directory ../stylesheets .css
and restart your server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;肯定是哪个配置文件在找这个 manifest.js ~
我到网上去搜这个出错原因，都是告诉我如何再生成一个 &lt;code&gt;mkdir -p app/assets/config&lt;/code&gt; 一大堆，其实我目的是要删除它的啊~&lt;/p&gt;

&lt;p&gt;最终发现，把 Gemfile 中的 sprockets-rails 移除既可。&lt;/p&gt;
&lt;h3 id="webpack-dev-server 要一直后台运行吗？"&gt;webpack-dev-server 要一直后台运行吗？&lt;/h3&gt;
&lt;p&gt;删除 assets 之后，启动  bin/webpack-dev-server 后 scss 才能加载，如果把 webpack-dev-server 用 ctrl + C 断掉，项目立即变成没有 scss 样式表的样子。搞不懂什么原因~&lt;/p&gt;

&lt;p&gt;看我的 app/javascript/packs/application.js&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* eslint no-console:0 */
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.
require("@rails/ujs").start()
require("turbolinks").start()
import * as ActiveStorage from "@rails/activestorage"
import $ from 'jquery';
window.jQuery = $;
window.$ = $;
import "channels"
import 'bootstrap/dist/js/bootstrap';
global.toastr = require("toastr")
import 'packs/orgchart';
import '../styles/application';
//document.addEventListener('turbolinks:load', ()=&amp;gt;{
//    $('[data-toggle="tooltip"]').tooltip();
//    $('[data-toggle="popover"]').popover()
//});

const images = require.context('../images', true)
const imagePath = (name) =&amp;gt; images(name, true)
import '@fortawesome/fontawesome-free/js/all';

toastr.options = {
  positionClass: "toast-top-center"
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看我的 app/javascript/styles/application.scss&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@import 'bootstrap/scss/bootstrap';
$fa-font-path: '@fortawesome/fontawesome-free/webfonts';
@import '@fortawesome/fontawesome-free/scss/fontawesome';
@import "template";
@import "orgchart";
@import 'toastr';

#chart-container .orgchart {
  width: 100%;
  overflow: auto;
  text-align: center;
}
#chart-container-max .orgchart {
  overflow: auto;
  text-align: center;

}

&lt;/code&gt;&lt;/pre&gt;</description>
      <author>syutran</author>
      <pubDate>Wed, 20 Jan 2021 09:42:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/40832</link>
      <guid>https://ruby-china.org/topics/40832</guid>
    </item>
    <item>
      <title>webpack 如何兼容 carrierwave?</title>
      <description>&lt;p&gt;webpack 打包 app/javascript 里的 images 和 packs，如何让它打包 /public/uploads 下的上传图片呢？&lt;/p&gt;

&lt;p&gt;carrierwave 上传的头像都在 /public/uploads 下，没有被 webpack 打包。不被打包的资源无法使用 image_pack_tag？&lt;/p&gt;

&lt;p&gt;现在的问题是，对没有上传头像的用户，使用一个缺省的头像。缺省的头像在 /app/javascript/images/里，只能使用 image_pack_tag 引用。如果用户上传的头像，就得换成 image_tag 引用。需要写个辅助方法来回切换，那真是太麻烦了。&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Thu, 30 Jan 2020 09:33:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/39471</link>
      <guid>https://ruby-china.org/topics/39471</guid>
    </item>
    <item>
      <title>百万行百字段 all.each do 会挂死</title>
      <description>&lt;p&gt;用网络连接的数据库，一个表有百万行且有 100 多个字段。我做了一个 task 逐行对每条数据做计算，用的 all.each do。死机~
我以为是写错了，到 rails console 下试试，什么都不做，只 each do 一下就挂了。应该是哪儿的问题呢？&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Mon, 20 Jan 2020 08:48:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/39459</link>
      <guid>https://ruby-china.org/topics/39459</guid>
    </item>
    <item>
      <title>rails 6 boostrap 尝鲜</title>
      <description>&lt;p&gt;为了使用富文本，决定 DEMO 下 Rails 6。比着几位兄台关于 webpack 在 Rails 6 上的实例，搞了一把。发现有些地方不准确，特别是 bootstrap 部分。应该是这样的：&lt;/p&gt;

&lt;p&gt;1、创建 APP&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails new loans -d mysql
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2、安装 boostrap jquery 和 popper.js&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add bootstrap jquery popper.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3、在 config/webpack/environment.js 中添加&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# config/webpack/environment.js
......
const webpack = require('webpack')
environment.plugins.append( "Provide", new webpack.ProvidePlugin({
    $: 'jquery', 
    jQuery: 'jquery',
    Popper: ['popper.js', 'default'] 
  }))
......
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4、在 app/javascript/packs/application.js 中添加&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#app/javascript/packs/application.js
......
import "bootstrap"
import "../styles/application"

document.addEventListener("turbolinks:load",() =&amp;gt; { 
  $('[data-toggle="tooltip"]').tooltip()
  $('[data-toggle="popover"]').popover() 
})
......
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5、在 app/javascript/styles/application.scss 中添加&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#app/javascript/styles/application.scss
......
@import 'bootstrap/scss/bootstrap'; 
@import 'fontawesome/scss/fontawesome';
......
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上的初始配置算是完成了，加个 Navbar 试试&lt;/p&gt;

&lt;p&gt;6、在 application.html.erb 中加上 bootstrap 的菜单&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;nav class="navbar navbar-expand-lg navbar-light bg-light"&amp;gt;
  &amp;lt;a class="navbar-brand" href="#"&amp;gt;Navbar&amp;lt;/a&amp;gt;
  &amp;lt;button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"&amp;gt;
    &amp;lt;span class="navbar-toggler-icon"&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;/button&amp;gt;

  &amp;lt;div class="collapse navbar-collapse" id="navbarSupportedContent"&amp;gt;
    &amp;lt;ul class="navbar-nav mr-auto"&amp;gt;
      &amp;lt;li class="nav-item active"&amp;gt;
        &amp;lt;a class="nav-link" href="#"&amp;gt;Home &amp;lt;span class="sr-only"&amp;gt;(current)&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li class="nav-item"&amp;gt;
        &amp;lt;a class="nav-link" href="#"&amp;gt;Link&amp;lt;/a&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li class="nav-item dropdown"&amp;gt;
        &amp;lt;a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"&amp;gt;
          Dropdown
        &amp;lt;/a&amp;gt;
        &amp;lt;div class="dropdown-menu" aria-labelledby="navbarDropdown"&amp;gt;
          &amp;lt;a class="dropdown-item" href="#"&amp;gt;Action&amp;lt;/a&amp;gt;
          &amp;lt;a class="dropdown-item" href="#"&amp;gt;Another action&amp;lt;/a&amp;gt;
          &amp;lt;div class="dropdown-divider"&amp;gt;&amp;lt;/div&amp;gt;
          &amp;lt;a class="dropdown-item" href="#"&amp;gt;Something else here&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li class="nav-item"&amp;gt;
        &amp;lt;a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true"&amp;gt;Disabled&amp;lt;/a&amp;gt;
      &amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
    &amp;lt;form class="form-inline my-2 my-lg-0"&amp;gt;
      &amp;lt;input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search"&amp;gt;
      &amp;lt;button class="btn btn-outline-success my-2 my-sm-0" type="submit"&amp;gt;Search&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/nav&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上资料，GG 半天也大搭，百度更白痴，最后在 YT 上找到了一片资料。希望给和我一样刚入门的家伙们节省一点时间。
哦，忘说了，那个 font-awesome 我也没搞定，搜遍全世界也没有只言片语。&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Wed, 28 Aug 2019 14:59:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/38992</link>
      <guid>https://ruby-china.org/topics/38992</guid>
    </item>
    <item>
      <title>有谁考虑过在 has_many 多对多关联时的分成问题吗？</title>
      <description>&lt;p&gt;问题：每个合约有多个员工共同拓展，员工对这笔业务的分成的比例不一样。在关联表上如何增加一个分成比例？&lt;/p&gt;

&lt;p&gt;把 google 搜了个遍，也没找到别人有类似的先例。不知道那些开发保险、银行业务的都怎么解决这个，多对多关联是必须的，但多人对某一业务的分成，然后计算某人所有业务的分成总数。这个需求应该是有的。&lt;/p&gt;

&lt;p&gt;希望这次不被网管定义为申手党~&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Fri, 02 Aug 2019 09:26:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/38896</link>
      <guid>https://ruby-china.org/topics/38896</guid>
    </item>
    <item>
      <title>turbolinks 造成 Jquery 不正常怎么办？</title>
      <description>&lt;p&gt;Rails 5 使用 application.js &lt;/p&gt;

&lt;p&gt;做了一个 NAV 的边栏采单&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//= require rails-ujs                                                                                                                  
//= require jquery3                                                                                                         
//= require popper                                                                                                    
//= require bootstrap-sprockets             
//= require activestorage                                                                                                      
//= require turbolinks                                                                                                           
//= require_tree .                                                                                                            

$(document).ready(function() {                                                                                      
  jQuery(function ($) {                                                                                              
    $(".sidebar-dropdown &amp;gt; a").click(function() {                                                             
      $(".sidebar-submenu").slideUp(200);                                                                       
      if ($(this).parent().hasClass("active")){                                                                 
        $(".sidebar-dropdown").removeClass("active");                                                      
        $(this).parent().removeClass("active");                                                         
      } else {                                                                                                               
        $(".sidebar-dropdown").removeClass("active");                                                           
        $(this).next(".sidebar-submenu").slideDown(200);                                                        
        $(this).parent().addClass("active");                                                                          
      }                                                                                                                             
    });                                                                                                                         

    $("#close-sidebar").click(function() {                                                                           
      $(".page-wrapper").removeClass("toggled");                                                            
    });                                                                                                                          
    $("#show-sidebar").click(function() {                                                                     
      $(".page-wrapper").addClass("toggled");                                                           
    });                                                                                                                 
  });                                                                                                                      
})                                                                                                                  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果加入 turbolinks 就无效（菜单里的下拉）是什么原因？&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if ($(this).parent().hasClass("active")){                                                                 
        $(".sidebar-dropdown").removeClass("active");  这行不执行                                                    
        $(this).parent().removeClass("active");               这行也不执行                                          
      } else {                                                                                                               
        $(".sidebar-dropdown").removeClass("active");                                                           
        $(this).next(".sidebar-submenu").slideDown(200);                                                        
        $(this).parent().addClass("active");                                                                          
      }                  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把第一行改为：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$(document).on('turbolinks:load', function() {
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也是没效果（drop-down）。&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Tue, 09 Oct 2018 16:41:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/37603</link>
      <guid>https://ruby-china.org/topics/37603</guid>
    </item>
    <item>
      <title>这和我们单位的小倩一个水准~</title>
      <description>&lt;p&gt;这个单引和我们单位小倩写的 08:30 分可是“师出同门”？
&lt;img src="https://l.ruby-china.com/photo/2018/e19beb18-949a-47d0-821c-b34671956c1e.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Tue, 02 Oct 2018 18:18:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/37584</link>
      <guid>https://ruby-china.org/topics/37584</guid>
    </item>
    <item>
      <title>还是找个公司做这个项目吧~</title>
      <description>&lt;p&gt;抱歉，不知道发这儿合适不合适。&lt;/p&gt;
&lt;h3 id="项目背景"&gt;项目背景&lt;/h3&gt;
&lt;p&gt;我们是一家县域金融机构（农商银行），在县城内有 10 家分支机构，在县域乡镇有 20 家分支机构。我们最近上线了 电话客服系统，主要是接收并受理（辖内）客户的贷款申请业务。&lt;/p&gt;
&lt;h3 id="故事"&gt;故事&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;我行领导到邻近一家农商银行参观时，看到他们上了一套贷款流程管理系统（就是工单系统），比互联网上的那些工单系统多出了几样功能。特别是在客服中心有一个大大的屏（拼接屏），大屏上有一个地图，地图上显示实时的客户经理位置。于是觉得很科学（就跟微信的位置共享差不多），就让我们（科技部门）马上订做这套系统。&lt;/p&gt;

&lt;p&gt;我们也联系了给那家农商行做开发的公司，但是有一些事情并不理想。于是想自己用 RoR 捣鼓一个出来，好像做了有半个多月吧，觉得老费精力且能力有限，想好的功能真是做不到。还有后续的，比如手机端、平板端等等，会有好多问题。还是找开发公司做更靠谱。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="需求"&gt;需求&lt;/h3&gt;
&lt;p&gt;需求分两部分吧~ 一是工单系统，二是大屏显示系统&lt;/p&gt;
&lt;h4 id="第一部分 大屏显示"&gt;第一部分 大屏显示&lt;/h4&gt;
&lt;p&gt;*1. 大屏显示就是在客服中心的那个大屏上显示客户经理的位置，当然要用地图，最好是用 Google 的高清卫星地图。现在 maps.google.cn 不帆墙也可以使用了，API 都是一样的。而且 Google 地图支持 19 级高清，就是能看到农村每一户人家的位置，有几棵树都能看的清。百度地图就办不到。为什么要用这么清晰的地图呢，因为后续，我们要在地图上定位每一个客户位置，以便于客户经理拜访。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;这个大屏其实就是给领导看的。来视察的，来考查的，来参观的，来学习的，都会在这个大屏前瞻仰一番。因为现在没有可以炫耀的东西，所以领导很急，其实我们科技部门更急。二十几万上的高清拼接屏，空闲半年了都~&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;位置定位我已经做过了，不是太复杂。就用 Google Map API 就可以了。&lt;/p&gt;

&lt;p&gt;*2.大屏除了显示大地图，还需要显示大数据，就是那些华丽的图形数据。就像图表，有柱状图，折线图，条形图，饼图，环图，这个我没有做，估计也不是太复杂。在使用 bootstrap 的模板时，发现有这些图表模板，没用过。&lt;/p&gt;
&lt;h4 id="第二部分 工单系统"&gt;第二部分 工单系统&lt;/h4&gt;
&lt;p&gt;就是客服接到贷款申请电话后，向支分机构派单，并监督分支机构的客户经理作业。我们需要一个这样的系统：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. 客服中心人员接听电话，得到客户的贷款需求和联系方式，登录本系统，创建工单，转至相关（地理位置或客户意向）的支行。&lt;/li&gt;
&lt;li&gt;2. 支行负责人收到短信（或微信）通知，登录系统，接到派单后，转派给辖内的客户经理。&lt;/li&gt;
&lt;li&gt;3. 客户经理收到短信（或微信）通知，登录系统，接收派单（或杜绝此单），完成对客户申请的调查后，回复调查情况。&lt;/li&gt;
&lt;li&gt;4. 客户经理与客户会面，要上传地理位置、各种图片（客户状况）。会面后，要写调查意见（同意授信或杜绝授信）。信息回复~&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;工单系统，做过项目的各位大侠一听就明白。如果非要我写出具体的需求来，真是有点难为我了。一是我觉得工单系统就那些东西，二来我真的不会写需求~饶了我吧&lt;/p&gt;
&lt;h3 id="特别说明"&gt;特别说明&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;主要实现以上功能的系统。最后决定还是交由软件公司来做，首先想到来 ruby-china 上找一找，看有没有愿意接手的公司。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;财务预算 10W 是初步计划，或者说是首期预算。我也不确定出多少才合适，对个人开发者来说应该可以，对公司来说是不是有点寒酸~
找公司做的原因是公对公，财务支出需要发票，超过 10W 的预算需要招投标，仅此而已。如果不因为这些限制，我倒十分乐意在 ruby-china 的社区里找个大侠~&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;我的微信号 wotogo，我会逐步完善这个需求，希望能出现个不错的外包公司~ &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="特别感谢各位大侠的关注和联络"&gt;特别感谢各位大侠的关注和联络&lt;/h4&gt;</description>
      <author>syutran</author>
      <pubDate>Fri, 22 Jun 2018 09:36:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/37027</link>
      <guid>https://ruby-china.org/topics/37027</guid>
    </item>
    <item>
      <title>ancestry 对 Person Model 支持有问题</title>
      <description>&lt;p&gt;我在自己的应用里使用了 gem ancestry 作为自关联的组件。但在 People 的模块里，会出现提交表单不支持 Node.children.new 的关联提交。我想肯定是 ancestry 的开发者忘了 rails 是区别单复数的，或者忘了 People 的单数是 person 了吧~&lt;/p&gt;

&lt;p&gt;解决的方法当前只能是在表单里加 &lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;%= f.hidden_field :ancestry %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在 controller 里 set_params 添加 ancestry&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Thu, 29 Mar 2018 14:14:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/35357</link>
      <guid>https://ruby-china.org/topics/35357</guid>
    </item>
    <item>
      <title>(转) 你，只是看起来很厉害</title>
      <description>&lt;p&gt;你聪明地以为自己能通晓各大领域。殊不知，你在每件事上都做了逃兵。&lt;/p&gt;

&lt;p&gt;看起来很厉害，只是你的自我感觉罢了。&lt;/p&gt;
&lt;h4 id="1.努力一点就行？"&gt;1.努力一点就行？&lt;/h4&gt;
&lt;p&gt;沙大神是我朋友圈里的著名“牛人”，众所周知他“上知天文，下知地理，音乐体育心理无所不通。”&lt;/p&gt;

&lt;p&gt;然而他的日子却凄惨无比，不仅各类聚会随不出份子钱，打个游戏的各类付费道具都需要我赠送。&lt;/p&gt;

&lt;p&gt;我理解他，人的一生不需要富足，只需不断探索并快乐着。但我又很难理解他，知识转化为财富真的有那么难吗？&lt;/p&gt;

&lt;p&gt;直到最近我发现了原因。&lt;/p&gt;

&lt;p&gt;沙大神的英雄联盟是被我带进坑的，不到几月就成了其中高手。但奇怪地是，他的段位停留在中上水平就再也上不去了。&lt;/p&gt;

&lt;p&gt;我问他：要不要努力一下，争取成为职业玩家！&lt;/p&gt;

&lt;p&gt;他说：“那些什么王者级别的，都是些不会享受生活的蠢货，一天只知道撸啊撸，我不屑成为他们。”&lt;/p&gt;

&lt;p&gt;我接着问他：那如何看待那些段位比他低的玩家，他们不就在享受生活吗？&lt;/p&gt;

&lt;p&gt;他回答我：“一群小白，不仅操作上手残，战术上更是垃圾。”&lt;/p&gt;

&lt;p&gt;沙大神说这话的时候得意洋洋，彷佛他只需要用一点点努力就可以达到常人无法达到的水平。&lt;/p&gt;

&lt;p&gt;他不仅看不起那些和他付出了同样努力却得不到相同效果的人，他更看不起那些努力是他几倍，但成果只比他优秀一点的人。&lt;/p&gt;

&lt;p&gt;我突然想起了，我初中时的同桌女生，她总是每晚复习到深夜，但期末考却只比我高几十分。我得意洋洋的向周围人炫耀，要是我和她一样努力，早就清华北大了吧！&lt;/p&gt;

&lt;p&gt;我的这份炫耀毫无意义，最终上清华的是她不是我。&lt;/p&gt;

&lt;p&gt;在努力这件事上，成果大于速度。或者说，这个世界不关心谁跑的有多快，它只看重谁先跑到终点。&lt;/p&gt;

&lt;p&gt;考 70 分的人是永远没有考 90 分的人厉害的，无关谁付出了多大努力。&lt;/p&gt;

&lt;p&gt;付出 30% 努力做到 50% 的人只能收获内心虚幻的成就感，那些付出了 200% 只收获了 80% 的人却能得到这个世界的奖励。&lt;/p&gt;

&lt;p&gt;沙大神之所以一事无成，就在于他既不能像职业玩家一样靠游戏为生，也不能像休闲玩家一样娱乐舒心。他的生活充满了掌声，实际上一事无成。&lt;/p&gt;

&lt;p&gt;小时候，妈妈总告诉我们：如果你再努力一点就会很了不起哦！这个信念一直支持着我们走到今天，殊不知这份自信害了我们，成了我们偷懒的最好借口。&lt;/p&gt;

&lt;p&gt;因为，“努力一点就行”是不断努力下去的最大敌人。&lt;/p&gt;
&lt;h4 id="2.你只是看起来很厉害"&gt;2.你只是看起来很厉害&lt;/h4&gt;
&lt;p&gt;曾经的我也以自己是一名斜杠青年为荣，除了主业是一名心理学教师外，我热爱画画，游戏打得不错，时不时还能写点现实小说。如果要把我名字前面加上前缀的话，几页纸都写不完。&lt;/p&gt;

&lt;p&gt;很长时间以来我很满足这种状态，我认为自己兴趣广泛，热爱生活。&lt;/p&gt;

&lt;p&gt;但渐渐地我开始发现不对，机灵如我却在面对人生上的全线溃败：游戏上我被高手虐的一塌糊涂，写作平台上我的小说阅读量寥寥无几，我投稿的画无数次被退稿，我申报的课题被学术大牛轻松挤下。&lt;/p&gt;

&lt;p&gt;我跟导师汇报了我的情况，导师笑着说。&lt;/p&gt;

&lt;p&gt;“你只是看起来很厉害！你聪明地以为，你能通晓各大领域。实际上，你在每件事上都做了逃兵。”&lt;/p&gt;

&lt;p&gt;看起来很厉害，只是我的自我感觉罢了。&lt;/p&gt;

&lt;p&gt;真正的厉害是有一个分水岭的，这个分水岭就是搜索引擎，如果你能提供的东西都能在网上搜到，那你一定并不厉害。&lt;/p&gt;

&lt;p&gt;举例，很多人在游戏上多赢了几次就觉得自己厉害，这真的是一种错觉。你必须玩到能和百度上发布视频的那些人一个技术，那才叫厉害。我可以不厉害，但我绝不炫耀。&lt;/p&gt;

&lt;p&gt;其次，人的一生虽然有无数的分支，但却是有主线任务的。&lt;/p&gt;

&lt;p&gt;我所有擅长的东西是必须沿着我的一个专长展开的。我的主线任务从来没变过啊，一直都是在科普心理学的道路上战斗。于是我整合了我所有的技能，让他们为这个主线服务。&lt;/p&gt;

&lt;p&gt;我用自己的画画技术，为自己创造了一个剑圣喵大师的头像。&lt;/p&gt;

&lt;p&gt;我不再单纯地写历史小说，而是用通俗的文笔来科普心理学知识。&lt;/p&gt;

&lt;p&gt;每天工作完毕后，我会打开游戏玩几局，不在乎输赢，纯粹消遣。&lt;/p&gt;

&lt;p&gt;以前我很自豪，在写作平台上我写了十万字，就已经接近别人四十万字的点赞数。&lt;/p&gt;

&lt;p&gt;有一天我彻底抛弃了这种自我麻痹，我开始佩服那些写作字数多的人，我从每周一更改为三天一更，不知不觉中，我已经成为写作平台上排行前列的人。&lt;/p&gt;

&lt;p&gt;我非常喜欢现在的自己，现在的我已经没有过去那么狂妄了，我似乎更能知道自己到底想要的是什么。&lt;/p&gt;

&lt;p&gt;我没有了过去爆棚的自豪感，反而无时无刻我都在感受自己的肤浅。&lt;/p&gt;

&lt;p&gt;每晚睡觉前我不再得意自己有过什么成就，我开始回忆自己走过的路，回忆起这条荆棘的路上我的每个脚印有多深，有多痛苦。&lt;/p&gt;
&lt;h4 id="3.不要用“厉害感”装饰自己"&gt;3.不要用“厉害感”装饰自己&lt;/h4&gt;
&lt;p&gt;“看起来很厉害”到“真正厉害”差着 10086 本书。&lt;/p&gt;

&lt;p&gt;“真正很厉害”到“生活达人”差着十万八千次尝试。&lt;/p&gt;

&lt;p&gt;花儿们总以为有了刺就可以显出自己的厉害，殊不知这才显示出它的弱小。&lt;/p&gt;

&lt;p&gt;这个信息爆炸的时代，我不担心你学不到东西，我只担心你学到一点东西就沾沾自喜，妄自尊大。&lt;/p&gt;

&lt;p&gt;这种智力上升的厉害感，其实是一种逃避现实的快感。有时候思想的冗余比思想的贫乏更加可怕。&lt;/p&gt;

&lt;p&gt;即便你满腹经纶，如果你自命清高从不写作，把知识分享给别人也只能是默默无闻。&lt;/p&gt;

&lt;p&gt;即便你武功盖世，如果不锄强扶弱、匡扶正义，也难成一代大侠。&lt;/p&gt;

&lt;p&gt;真正厉害的人，是不会用“厉害感”装饰自己的。&lt;/p&gt;

&lt;p&gt;生活达人们不管看起来是否厉害，他们都不会在真刀真枪的实战面前抱头鼠窜。&lt;/p&gt;

&lt;p&gt;即使你拥有倾国倾城的容貌，经天纬地的才华，富可敌国的金钱.....即使你拥有这个世界上人人羡慕的一切，也不能证明你的强大。&lt;/p&gt;

&lt;p&gt;因为心的强大，才是真正的强大。&lt;/p&gt;

&lt;p&gt;真正的强大永远是沉默的。&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Fri, 23 Mar 2018 08:06:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/35304</link>
      <guid>https://ruby-china.org/topics/35304</guid>
    </item>
    <item>
      <title>Devise 提交验证不错，不知这是哪个 Gem 搞的鬼</title>
      <description>&lt;p&gt;使用 devise 作为系统认证，前几天还能使用注册，今天就不行了。&lt;/p&gt;

&lt;p&gt;输上邮箱，密码和二次确认的密码，注册报错。
如图：
&lt;img src="https://l.ruby-china.com/photo/2018/9951db99-8ad7-4a48-bba4-f933e7a91192.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;后台显示的信息：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Started POST "/users" for 192.168.1.211 at 2018-03-14 13:57:43 +0800
Cannot render console from 192.168.1.211! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Devise::RegistrationsController#create as HTML
  Parameters: {"utf8"=&amp;gt;"✓", "authenticity_token"=&amp;gt;"zlK5i56uk0NdvVy6AEctGhGpnaVyE6GhgNCINTQwwG5WfpxY9WPvEWtanHENl9XVyZGRXXV0GQcACB3wcEMpHQ==", "user"=&amp;gt;{"email"=&amp;gt;"momo@126.com", "password"=&amp;gt;"[FILTERED]", "password_confirmation"=&amp;gt;"[FILTERED]"}, "commit"=&amp;gt;"Sign up"}
   (0.2ms)  BEGIN
  User Exists (0.4ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY 'momo@126.com' LIMIT 1
   (0.2ms)  ROLLBACK
  Rendering devise/registrations/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (1.1ms)
  Rendered devise/registrations/new.html.erb within layouts/application (8.2ms)
  Rendered layouts/_header.html.erb (2.3ms)
  Rendered comments/_flashes.html.erb (0.5ms)
  Rendered layouts/_footer.html.erb (0.3ms)
Completed 200 OK in 331ms (Views: 90.9ms | ActiveRecord: 0.8ms)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在网上查一那串报错信息：Please review the problems below:&lt;/p&gt;

&lt;p&gt;好像是 simple_form 的报错信息，但再无其它资料表明原因。
各位给想想~&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Wed, 14 Mar 2018 14:06:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/35234</link>
      <guid>https://ruby-china.org/topics/35234</guid>
    </item>
    <item>
      <title>如何解决转码 (UTF-8 to AscII) 问题？</title>
      <description>&lt;p&gt;ROR controllen 里，需要把一些信息存储为小文本文件，我是这样做的：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f=File.new("test1.txt")
f.puts("标题信息：#{@task.title}")
f.close
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;新创建的文件编码是 UTF8 类型的文本，我需要把它转为 windows 下的文本（ASCII 或 GB2312 等）才能使用。首先想到的是在操作系统（ubuntu）里使用 iconv 转换，但转换后汉字转没了。于是在网上查了一些 ruby 的 puts 的参数，好像也没有涉及转码的资料，只好来询各位了~&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Mon, 12 Mar 2018 07:51:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/35211</link>
      <guid>https://ruby-china.org/topics/35211</guid>
    </item>
    <item>
      <title>求助，边栏弹出菜单被 bootstrap 的 row 覆盖</title>
      <description>&lt;p&gt;我从 &lt;a href="https://codepen.io/illnino/pen/nsBif" rel="nofollow" target="_blank"&gt;https://codepen.io/illnino/pen/nsBif&lt;/a&gt; 抄了个不错的 google nexus website menu 作我的侧边栏弹出菜单。
使用 bootstrap 的 row 时，该菜单弹出时被覆盖，google search 的两天都没找到解决办法。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/f28117c4-4327-4778-a4cd-67498437a4e8.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;求解~&lt;/p&gt;</description>
      <author>syutran</author>
      <pubDate>Sat, 24 Feb 2018 10:36:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/35066</link>
      <guid>https://ruby-china.org/topics/35066</guid>
    </item>
  </channel>
</rss>
