<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Catherine (Tafurs)</title>
    <link>https://ruby-china.org/Catherine</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>【远程】Rails 后端程序员 1 位（再开放一个名额）</title>
      <description>&lt;hr&gt;

&lt;p&gt;更新：因公司近期在集中资源用于一个项目上，所以面试反馈会提供的较迟，希望理解！
目前再开放一个名额。&lt;/p&gt;

&lt;p&gt;备注：口语的交流能力比较重要，不少候选人技术非常不错，但团队反馈是认为口语的沟通限制了自己能力的展示。&lt;/p&gt;

&lt;p&gt;邮件标题：【Rails-Developer】
简历发邮箱：ZHJpbmVsaXVAZ21haWwuY29t&lt;/p&gt;
&lt;h2 id="公司、项目背景"&gt;公司、项目背景&lt;/h2&gt;
&lt;p&gt;主要给餐饮行业做支持和服务。整个系统很庞大，核心是针对服务高端餐厅以及高端酒店。
在国内有实体公司，但国内团队规模很小，主要是运营和销售。
HQ 是在日本，Slack 上各个部门同事总共 100 多，不到 200 人。
公司在规划和扩大国内市场&lt;/p&gt;

&lt;p&gt;项目 10 多年了，持续保持更新，现在用的是 Rails 7&lt;/p&gt;
&lt;h2 id="工作地点"&gt;工作地点&lt;/h2&gt;
&lt;p&gt;远程&lt;/p&gt;
&lt;h2 id="薪资"&gt;薪资&lt;/h2&gt;
&lt;p&gt;18-25K（大概），试用期全薪，当月 25 日发全月工资。
没有 bonus 和绩效，所见即所得。&lt;/p&gt;
&lt;h2 id="福利"&gt;福利&lt;/h2&gt;
&lt;p&gt;WLB、带薪休假、远程。&lt;/p&gt;
&lt;h2 id="要求"&gt;要求&lt;/h2&gt;
&lt;p&gt;语言：需要和欧洲、印度、日本等地方的同事沟通。口语流利&lt;b&gt;必须&lt;/b&gt;流利（不要求口语多标准，只要能够互相听得懂，互相谈笑风生就没问题）&lt;/p&gt;

&lt;p&gt;年龄：60 岁及以下&lt;/p&gt;

&lt;p&gt;5 年后端开发经验，其中至少 3 年或以上 Rails 开发经验&lt;/p&gt;

&lt;p&gt;了解 Ruby 常见的设计模式和最佳实践&lt;/p&gt;

&lt;p&gt;熟悉 Git 和 Github 的实现版本控制&lt;/p&gt;

&lt;p&gt;有做过小程序的加一点点分&lt;/p&gt;
&lt;h2 id="缺点"&gt;缺点&lt;/h2&gt;
&lt;p&gt;社保需自己处理&lt;/p&gt;
&lt;h2 id="面试流程"&gt;面试流程&lt;/h2&gt;
&lt;p&gt;第一轮面试：Google meeting，20-30 分钟分钟。用英语和我聊聊，介绍下自己以及自己做的项目，以及回答一些关于公司以及社保的问题。包括一个 10-20 分钟的小作业&lt;/p&gt;

&lt;p&gt;第二轮面试：和 1-2 位技术团队聊&lt;/p&gt;

&lt;p&gt;后续会依次通知&lt;/p&gt;

&lt;p&gt;正常招聘流程是这样，可能会有背调。&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Fri, 14 Apr 2023 17:33:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/43004</link>
      <guid>https://ruby-china.org/topics/43004</guid>
    </item>
    <item>
      <title>Turbo Stream 渲染时 data-dismiss 等事件失效，有什么好办法？</title>
      <description>&lt;p&gt;比如我这里遇到的是 tailwind 的 data-dismiss-target 无法生效。单纯是因为被 Turbo Stream 渲染，没有绑定上 dismiss 事件。&lt;/p&gt;

&lt;p&gt;自己写 JS 重新绑定一下可以解决，有什么好一点的办法吗？&lt;/p&gt;

&lt;p&gt;例如加个什么标签，类似以前 &lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="ss"&gt;:turbolink&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种，让 turbo_frame 替换的时候，自动跳过这种标记的元素&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Mon, 08 Aug 2022 16:08:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/42579</link>
      <guid>https://ruby-china.org/topics/42579</guid>
    </item>
    <item>
      <title>视频数据的保护有什么现成的解决方案吗？</title>
      <description>&lt;p&gt;例如各大视频网站，避免用户可以通过 Source 直接下载视频（当然要手持设备录制不管了），有什么现成的解决方案或者服务吗？&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Fri, 29 Apr 2022 17:47:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/42356</link>
      <guid>https://ruby-china.org/topics/42356</guid>
    </item>
    <item>
      <title>逻辑短路罢工了？还不快去改代码！</title>
      <description>&lt;p&gt;虽然有点标题党了，因为 condition 里其实不是逻辑运算符，而是 symbol。但看上去直觉就会觉得：恩，这应该短路才对。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Boss&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;before_save&lt;/span&gt; &lt;span class="ss"&gt;:say_good&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;if: :case1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="ss"&gt;:case2&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="ss"&gt;:im_fucked_up&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;case1&lt;/span&gt;
    &lt;span class="kp"&gt;false&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;case2&lt;/span&gt;
    &lt;span class="kp"&gt;false&lt;/span&gt;    
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;im_fucked_up&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Fucked up"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;say_good&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Im reallyyyyy fucked up"&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;输出结果不会 Really fucked up。
也就是说，整体逻辑返回值依然是 OK 的，但看似像逻辑判断符的 Symbol 不会被短路。&lt;/p&gt;

&lt;p&gt;不怕一万就怕万一，万一 condition 里不规范有写入的操作，那就真影响大了。&lt;/p&gt;

&lt;p&gt;这个回调的 if 其实不是 if 关键字，它只是 before_save 的一个 key，对应的 value 是它的条件，所以其实用逻辑判断符去连接，是不太规范的。&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Fri, 22 Apr 2022 16:04:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/42335</link>
      <guid>https://ruby-china.org/topics/42335</guid>
    </item>
    <item>
      <title>你们写程序是用 if 多，还是用 unless 多？</title>
      <description>&lt;p&gt;unless 在 2 个或以上的 conditions 时，阅读和梳理让我有点头痛。相反用 if 的话，至少阅读和逻辑流畅度感觉要顺畅一些。&lt;/p&gt;

&lt;p&gt;平时我用 unless 只有一个场景，那就是避免用 &lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt; 
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时 &lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就显得很简单明了。&lt;/p&gt;

&lt;p&gt;是单纯我自己用 unless 太少的原因，还是大伙都是和我一样？&lt;img title=":tired_face:" alt="😫" src="https://twemoji.ruby-china.com/2/svg/1f62b.svg" class="twemoji"&gt; &lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Wed, 02 Mar 2022 09:21:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/42177</link>
      <guid>https://ruby-china.org/topics/42177</guid>
    </item>
    <item>
      <title>有哪些，是项目开始运行甚至成熟后，非常后悔没有提前配置或加上的？</title>
      <description>&lt;p&gt;想收集“如果当时”，“那就”的故事，也可以给大家初建项目时作为个参考。&lt;/p&gt;

&lt;p&gt;欢迎大伙分享&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Fri, 03 Dec 2021 19:17:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/41946</link>
      <guid>https://ruby-china.org/topics/41946</guid>
    </item>
    <item>
      <title>Docker build 时遇到的 native extension 的问题</title>
      <description>&lt;p&gt;先放 Gemfile 和 Dockerfile&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Dockerfile&lt;/span&gt;
FROM ruby:3.0.0-alpine

ENV &lt;span class="nv"&gt;BUNDLER_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2.2.6

RUN apk &lt;span class="nt"&gt;--no-cache&lt;/span&gt; add postgresql-client &lt;span class="se"&gt;\&lt;/span&gt;
  vim &lt;span class="se"&gt;\&lt;/span&gt;
  yarn &lt;span class="se"&gt;\&lt;/span&gt;
  wget &lt;span class="se"&gt;\&lt;/span&gt;
  gcc &lt;span class="se"&gt;\&lt;/span&gt;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  libc-dev &lt;span class="se"&gt;\&lt;/span&gt;
  linux-headers &lt;span class="se"&gt;\&lt;/span&gt;
  make &lt;span class="se"&gt;\&lt;/span&gt;
  libxml2-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libressl-dev &lt;span class="se"&gt;\&lt;/span&gt;
  postgresql-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libffi-dev &lt;span class="se"&gt;\&lt;/span&gt;
  readline-dev &lt;span class="se"&gt;\&lt;/span&gt;
  yaml-dev &lt;span class="se"&gt;\&lt;/span&gt;
  tzdata &lt;span class="se"&gt;\&lt;/span&gt;
  git &lt;span class="se"&gt;\&lt;/span&gt;
  nodejs &lt;span class="se"&gt;\&lt;/span&gt;
  less &lt;span class="se"&gt;\&lt;/span&gt;
  curl &lt;span class="se"&gt;\&lt;/span&gt;
  g++ &lt;span class="se"&gt;\&lt;/span&gt;
  ca-certificates &lt;span class="se"&gt;\&lt;/span&gt;
  imagemagick &lt;span class="se"&gt;\&lt;/span&gt;
  build-base &lt;span class="se"&gt;\&lt;/span&gt;
  ruby-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libxslt-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libcurl

RUN gem &lt;span class="nb"&gt;install &lt;/span&gt;bundler &lt;span class="nt"&gt;-v&lt;/span&gt; 2.2.6

WORKDIR /app

COPY Gemfile Gemfile.lock ./

&lt;span class="c"&gt;# Cuz it'd be extremely slow not doing so&lt;/span&gt;
RUN gem &lt;span class="nb"&gt;install &lt;/span&gt;sassc &lt;span class="nt"&gt;--version&lt;/span&gt; 2.4.0

RUN bundle config build.nokogiri &lt;span class="nt"&gt;--use-system-libraries&lt;/span&gt;

RUN bundle check &lt;span class="o"&gt;||&lt;/span&gt; bundle &lt;span class="nb"&gt;install

&lt;/span&gt;COPY package.json yarn.lock ./

RUN yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--check-files&lt;/span&gt;

COPY &lt;span class="nb"&gt;.&lt;/span&gt; ./

&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Gemfile&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;"https://rubygems.org"&lt;/span&gt;

ruby &lt;span class="s1"&gt;'3.0.0'&lt;/span&gt;

gem &lt;span class="s1"&gt;'rails'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 6.0.4'&lt;/span&gt;
gem &lt;span class="s1"&gt;'puma'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 4.1'&lt;/span&gt;
gem &lt;span class="s1"&gt;'sass-rails'&lt;/span&gt;, &lt;span class="s1"&gt;'&amp;gt;= 6'&lt;/span&gt;
gem &lt;span class="s1"&gt;'webpacker'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 4.0'&lt;/span&gt;
gem &lt;span class="s1"&gt;'turbolinks'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 5'&lt;/span&gt;
gem &lt;span class="s1"&gt;'jbuilder'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 2.7'&lt;/span&gt;
gem &lt;span class="s1"&gt;'bootsnap'&lt;/span&gt;, &lt;span class="s1"&gt;'&amp;gt;= 1.4.2'&lt;/span&gt;, require: &lt;span class="nb"&gt;false

&lt;/span&gt;group :development, :test &lt;span class="k"&gt;do
  &lt;/span&gt;gem &lt;span class="s1"&gt;'byebug'&lt;/span&gt;, platforms: &lt;span class="o"&gt;[&lt;/span&gt;:mri, :mingw, :x64_mingw]
end

group :development &lt;span class="k"&gt;do
  &lt;/span&gt;gem &lt;span class="s1"&gt;'pry-rails'&lt;/span&gt;
  gem &lt;span class="s1"&gt;'web-console'&lt;/span&gt;, &lt;span class="s1"&gt;'&amp;gt;= 3.3.0'&lt;/span&gt;
  gem &lt;span class="s1"&gt;'listen'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 3.2'&lt;/span&gt;
  gem &lt;span class="s1"&gt;'spring'&lt;/span&gt;
  gem &lt;span class="s1"&gt;'spring-watcher-listen'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt; 2.0.0'&lt;/span&gt;
end

group :test &lt;span class="k"&gt;do
  &lt;/span&gt;gem &lt;span class="s1"&gt;'capybara'&lt;/span&gt;, &lt;span class="s1"&gt;'&amp;gt;= 2.15'&lt;/span&gt;
  gem &lt;span class="s1"&gt;'selenium-webdriver'&lt;/span&gt;
  gem &lt;span class="s1"&gt;'webdrivers'&lt;/span&gt;
end

gem &lt;span class="s1"&gt;'tzinfo-data'&lt;/span&gt;, platforms: &lt;span class="o"&gt;[&lt;/span&gt;:mingw, :mswin, :x64_mingw, :jruby]

gem &lt;span class="s1"&gt;'pg'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt;1.1.3'&lt;/span&gt;
gem &lt;span class="s1"&gt;'sidekiq'&lt;/span&gt;, &lt;span class="s1"&gt;'~&amp;gt;6.0.0'&lt;/span&gt;
gem &lt;span class="s2"&gt;"sidekiq-scheduler"&lt;/span&gt;
gem &lt;span class="s1"&gt;'react-rails'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在本地 Mac 上打包，一切正常。但是在 ubuntu 的 vps (1G/1C) 上，执行到 bundle install 时，会在 sassc 2.4.0 的 build native extensions 那一步卡的非常非常久。并且 CPU 和内存在这一步的时间段里，基本上占用都是 80% 左右。&lt;/p&gt;

&lt;p&gt;但独执行写一行 RUN 来安装 sassc，可以解决这个问题，也可以拿 Mac 上打包好的作为个基础 image 解决问题。&lt;/p&gt;

&lt;p&gt;但我有一个问题不太明白。
bundle install 和 gem install 无非是一个用 bundle 来负责安装。bundle 在安装的版本上会做出最兼容的选择，比如 A 和 B 都需要 sassc 的依赖的情况下。但我已经在 Gemfile 中明确指明 2.4 版本，依然在 ubuntu 中失败。既然和版本没关系，为什么：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mac 中 build 到 bundle 那一步安装 sassc 直接就过了，内存和 CPU 强一点的原因？&lt;/li&gt;
&lt;li&gt;单独加一层 RUN 去用 gem 直接安装 sassc 就成功了。而放在 Dockerfile 中让 bundle 去安装却卡死了，为什么会有这个区别？&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>Catherine</author>
      <pubDate>Mon, 13 Sep 2021 13:39:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/41680</link>
      <guid>https://ruby-china.org/topics/41680</guid>
    </item>
    <item>
      <title>Rails 4.2.10 -&gt; 5.0.0 的一个跟 enum 有关很隐蔽的差异</title>
      <description>&lt;p&gt;项目从 4.2.10-&amp;gt;5.0.0。&lt;/p&gt;

&lt;p&gt;在 4.2.10 中 (其他版本未测试)&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="ss"&gt;state: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;good: &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;bad: &lt;/span&gt;&lt;span class="mi"&gt;1&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;在 4.2.10 中&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:state&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会得到对应的整数的值。
但在 5.0.0 中，会变成对应的 string 的值&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Fri, 07 Feb 2020 17:20:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/39489</link>
      <guid>https://ruby-china.org/topics/39489</guid>
    </item>
    <item>
      <title>这种需要强行增加对象阅读数，有其他建议吗？</title>
      <description>&lt;p&gt;类似微博一样，只要 user.posts 取出来了，没有进入详情页，都给它的阅读数 +1。
只觉得这个需求好暴力，除了在 redis 里计数累积 5 次访问再更新阅读数，或者就直接访问一次更新下阅读数之外，有什么更好的建议吗？&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Tue, 23 May 2017 17:42:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/33049</link>
      <guid>https://ruby-china.org/topics/33049</guid>
    </item>
    <item>
      <title>国外有类似咱们 ruby-china 这样的社区吗？</title>
      <description>&lt;p&gt;ruby/rails只是某个节点或是标签的网站不算，像reddit、stackoverflow这种。&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Thu, 13 Oct 2016 17:50:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/31314</link>
      <guid>https://ruby-china.org/topics/31314</guid>
    </item>
    <item>
      <title>空余时间想多学点东西，有几个问题向了解下，求老司机指点</title>
      <description>&lt;ol&gt;
&lt;li&gt;以 Rails 工作内容为主的相关、且比较实用的技术栈有哪些？&lt;/li&gt;
&lt;li&gt;以及这些技术在工作中主要用于应付哪些场景做哪些事？（以自己工作内容参考更好）&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;重点是“ &lt;strong&gt;实用&lt;/strong&gt;”，比如 nodejs 这种一套代码有好几种标准，不会都不知道代码什么意思的技术就算了。（看其他人吐槽的，没接触太多 nodejs，有错勿喷）&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;6 月拿了毕业证就正式踏入社会，不多学点东西没安全感。&lt;/p&gt;

&lt;p&gt;自己能力大概就是随便搬了一段招聘贴里对初级 ruby 的要求的入门水平。&lt;/p&gt;

&lt;p&gt;熟悉 Ruby/Ruby on Rails 开发
熟悉 HTML/CSS/JavaScript
熟悉 MySQL/Linux/Git
具有一定的英文读写能力
对新技术充满好奇心，学习能力强，代码清晰整洁&lt;/p&gt;

&lt;p&gt;这两天在帮媳妇看手机，准备给她换一个。
在选的时候发现手机都分标配和高配，突然感觉自己就像块标配手机，没啥亮点的话，太容易就被顾客跳过了....&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Tue, 31 May 2016 23:42:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/30178</link>
      <guid>https://ruby-china.org/topics/30178</guid>
    </item>
    <item>
      <title>RSpec 的一些问题</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="s2"&gt;"is invalid with a duplicate email address"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="no"&gt;Contact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="ss"&gt;firstname: &lt;/span&gt;&lt;span class="s1"&gt;'Joe'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;lastname: &lt;/span&gt;&lt;span class="s1"&gt;'Tester'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="s1"&gt;'tester@example.com'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;contact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Contact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="ss"&gt;firstname: &lt;/span&gt;&lt;span class="s1"&gt;'Jane'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;lastname: &lt;/span&gt;&lt;span class="s1"&gt;'Tester'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="s1"&gt;'tester@example.com'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="n"&gt;have&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;errors_on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:email&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;expect(contact) 的类型是 RSpec::Expectations::ExpectationTarget&lt;/p&gt;

&lt;p&gt;model 有 email 的唯一性验证，但跑测试说没有 have 这个方法，搞不明白为啥？&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Tue, 24 May 2016 18:36:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/30110</link>
      <guid>https://ruby-china.org/topics/30110</guid>
    </item>
    <item>
      <title>(解决了问题、原理未搞清楚) 一个无比奇怪的错误，调试了 2 小时，完全不知道咋回事</title>
      <description>&lt;p&gt;项目地址： &lt;a href="https://github.com/CoolDrinELiu/graduation.git" rel="nofollow" target="_blank"&gt;https://github.com/CoolDrinELiu/graduation.git&lt;/a&gt;
花了一晚上加一早晨调试，最终解决了问题，但没有搞清楚到底原因是什么，有兴趣克隆下来看看吧。整个后台就 2 个模块，内容并不多
实在不想继续深究问题的根源了...1 是马上要答辩没多的时间，2 是已经累觉不爱了....&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;注释 manage/application_controller.rb的  before_filter :require_login&lt;/li&gt;
&lt;li&gt;登录 root_path/manage&lt;/li&gt;
&lt;li&gt;git reset --hard 4508d0bd64fc336dc5ac42115c0d91f419136d1e  回滚到发布这个问题时的版本&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;出错是在调用 Micropost 对象时，进入_where 方法会 clone 自己，就是克隆自己的时候出错（还有个层完全一样的 user model，运行到这 clone 自己就不会有任何问题）&lt;/p&gt;

&lt;p&gt;解决方法是将：_where 方法的 clone 换成 self。
_where 方法的全部内容在 11 楼 - &lt;a href="https://ruby-china.org/topics/29891#reply11" title=""&gt;传送门&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;_where&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;
  &lt;span class="n"&gt;relation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;clone&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原因：不知道&lt;/p&gt;

&lt;p&gt;先描述下现象：
建了一个空的 microposts_controller.rb，继承 patters_controller，里面定义的是后台可以规整在一起的 index edit update 等方法。patters_controller 继承 application_controller。里面有些常用方法。&lt;/p&gt;

&lt;p&gt;在任何一个项目文件中直接按保存，不做任何改动，直接保存（什么也没改动），报错。但这时&lt;strong&gt;直接再刷新，一切正常。&lt;/strong&gt;
完整的报错信息是这样，&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ActiveRecord::StatementInvalid &lt;span class="k"&gt;in &lt;/span&gt;Manage::Microposts#index
Showing /home/ljy/micro/app/views/manage/microposts/index.html.slim where line &lt;span class="c"&gt;#2 raised:&lt;/span&gt;

SQLite3::SQLException: no such table: : SELECT &lt;span class="s2"&gt;""&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt; FROM &lt;span class="s2"&gt;""&lt;/span&gt;  ORDER BY &lt;span class="s2"&gt;"microposts"&lt;/span&gt;.&lt;span class="s2"&gt;"created_at"&lt;/span&gt; DESC, created_at desc
Extracted &lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;around line &lt;span class="c"&gt;#2):&lt;/span&gt;
1 &lt;span class="o"&gt;=&lt;/span&gt; content_for :tbody &lt;span class="k"&gt;do
&lt;/span&gt;2  - @microposts.each &lt;span class="k"&gt;do&lt;/span&gt; |entry|
3    &lt;span class="nb"&gt;tr
&lt;/span&gt;4     td &lt;span class="o"&gt;=&lt;/span&gt; entry.id
5     td &lt;span class="o"&gt;=&lt;/span&gt; entry.user.email
6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个表是有的，死活不知道为什么给这个报错。&lt;/p&gt;
&lt;h3 id="问题的定位"&gt;问题的定位&lt;/h3&gt;
&lt;p&gt;大概定位了问题出在那个 default 方法上，当我随便保存一下（第一次打开 microposts 的 index 页面肯定会报错）。打在 default 方法里的断点进去后，如果我在终端输入一个 self 后按回车，所有断点直接 exit 退出去，一切正常。&lt;strong&gt;也就是说，不知道为什么 default 方法没有被完整执行？？？实在不知道为什么了。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我在&lt;a href="https://ruby-china.org/topics/29674" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/29674&lt;/a&gt;
里也遇到过类似的问题，出错特征都差不多。不知道是哪里关键字冲突，上一次是换了一个 namespace，就没有出现类似问题，我也就略过问题的根源了。这次居然又出现（崩溃）&lt;/p&gt;

&lt;p&gt;我整个 manage 域下就 2 个资源，users 页面完全正常，没有任何问题。也没有其他方法、类名、字段啥的叫 manage
求助各位朋友...&lt;/p&gt;

&lt;p&gt;路由：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="ss"&gt;:manage&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="s1"&gt;'homes#index'&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:homes&lt;/span&gt;

  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:users&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:microposts&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;view/manage/microposts/index.html.slim 就是报错的地方第 2 行的&lt;a href="/microposts" class="user-mention" title="@microposts"&gt;&lt;i&gt;@&lt;/i&gt;microposts&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content_for&lt;/span&gt; &lt;span class="ss"&gt;:tbody&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="vi"&gt;@microposts.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;entry&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;tr&lt;/span&gt;
      &lt;span class="n"&gt;td&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;
      &lt;span class="n"&gt;td&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/controller/patters_controller.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Manage::PatternsController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Manage&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ApplicationController&lt;/span&gt; &lt;span class="c1"&gt;#:nodoc:&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;
    &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;text: &lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;layout: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;controller_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/application/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;instance_variable_set&lt;/span&gt; &lt;span class="s2"&gt;"@&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;controller_name&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="n"&gt;records&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/controller/microposts_controller.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Manage::MicropostsController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Manage&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;PatternsController&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.default 方法&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;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
        &lt;span class="nb"&gt;self&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="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:where&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&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;:order&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="s2"&gt;"created_at desc"&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;del&gt;_where 方法是一个查询，方法有点长，不是它里免出错的，第一次刷新页面 params[:where] 里都是空的，不会有影响。&lt;/del&gt;&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Sat, 30 Apr 2016 23:43:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/29891</link>
      <guid>https://ruby-china.org/topics/29891</guid>
    </item>
    <item>
      <title>不知道为什么，但感觉醉了</title>
      <description>&lt;p&gt;一个子项目，和主项目类似，用的是 manage 域/user/feedback 这种域以及继承关系。&lt;/p&gt;

&lt;p&gt;子项目我就直接在 user 文件夹下建了 feedbacksController 以及相关 view、model，继承关系不会有一点错。
继承关系如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;controllers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;feedbacks_controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User::FeedbacksController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ApplicationController&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;controllers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;application_controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User::ApplicationController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;BasesController&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;controllers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;application_controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ApplicationController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActionController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;controllers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;base_controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BasesController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;PatternsController&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;controllers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;patterns_controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PatternsController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除了 base_controller 有些常用方法，以及 patterscontroller 里的统一模板方法外，/user 下的控制器只定义了继承关系，什么都没有&lt;/p&gt;

&lt;p&gt;在 patternscontroller 里定义了统一的 index、show 等方法&lt;/p&gt;

&lt;p&gt;诡异的一幕出现了。重启项目，先打开 home_path，然后进入我的 user_feedbacks_path，出错，说&lt;a href="/feedbacks" class="user-mention" title="@feedbacks"&gt;&lt;i&gt;@&lt;/i&gt;feedbacks&lt;/a&gt;为 nil。也就是说完全没有进入 patterscontroller（在 patterscontroller 里的 index 方法里打了断点，报错的时候压根没有进去）
而这时不关闭服务，直接随便找一个文件，在一个没有意义的地方加个没有意义的空格，保存。同样的地址，可以访问了。（就是 pattercontroller 的 index 页面），进入断点了...一切正常了。&lt;/p&gt;

&lt;p&gt;但只要重启服务，先访问 home_path，然后再进 user_feedbacks_path，就妥妥的报错。&lt;/p&gt;

&lt;p&gt;查过路由没有 user_*_path 被用的情况，除了我的 user_feedbacks_path。&lt;br&gt;
换了个 person 的域指回 user 就完全正常了....&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="ss"&gt;:person&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;path: &lt;/span&gt;&lt;span class="s1"&gt;'user'&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;:feedbacks&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;model 下有 user.rb，但也有个 user 文件夹，model/user 下的所有类都可以正常 curd
controller 下有 users_controller&lt;/p&gt;

&lt;p&gt;应该是这俩存在的原因吧，它的 index show 等方法和页面都可以完全正常使用，只能猜测，不知道怎么定位到问题的根源。虽然解决了问题，但只是解决了问题...&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Tue, 12 Apr 2016 14:55:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/29674</link>
      <guid>https://ruby-china.org/topics/29674</guid>
    </item>
    <item>
      <title>分页的极限？</title>
      <description>&lt;p&gt;用的 kaminari，和其他分页估计也大同小异吧。现在 index 方法里的值很多。production 下访问到这直接无法打开。
在用 view helper 是这样调用的 paginate &lt;a href="/xxx" class="user-mention" title="@xxx"&gt;&lt;i&gt;@&lt;/i&gt;xxx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;不知道是 index 方法里取数据时太多出错，还是触碰到了分页的极限。若是后者，设置个 total_page 的值，传给 paginate 应该就可以了吧？&lt;/p&gt;

&lt;p&gt;这种情况下如果想本地测试该怎么办，不知道分页的极限是多少，只能插入海量数据后测试吗？海量数字具体是多少也的靠经验值...&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Tue, 05 Apr 2016 14:23:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/29544</link>
      <guid>https://ruby-china.org/topics/29544</guid>
    </item>
    <item>
      <title>where 的一个蛋疼设定</title>
      <description>&lt;p&gt;例如我把一个千辛万苦排序出来的 ids 数组，重托给 where 去查询。结果 where 这小婊砸不按 ids 数组里的顺序乖乖查，按 id 的升序去查的。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="no"&gt;A&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="n"&gt;ids&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;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:id&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="mi"&gt;1&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="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;诸君有没有遇到类似问题，是如何解决的？&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Thu, 31 Mar 2016 13:57:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/29518</link>
      <guid>https://ruby-china.org/topics/29518</guid>
    </item>
    <item>
      <title>像 Rails API 文档左侧的那个搜索功能是怎么实现的？</title>
      <description>&lt;p&gt;求老司机带路&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Thu, 24 Mar 2016 12:09:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/29438</link>
      <guid>https://ruby-china.org/topics/29438</guid>
    </item>
    <item>
      <title>�Rails 的 delegate 的两个小问题，看了 apidock 后还是有点没明白</title>
      <description>&lt;p&gt;1.通过 Foo.new.hello 打印出的 class 会是 Greeter 对象没错吧
主要没明白的是 prefix 的用法不是特别明白，意思就是若加上 prefix 在 Foo 的 delegate 里，调用 Foo.new.hello 时 prefix 的申明是放在哪里每次默认调用的？&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Greeter&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;
    &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'hello'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;goodbye&lt;/span&gt;
    &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'goodbye'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Foo&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:greeter&lt;/span&gt;
  &lt;span class="n"&gt;delegate&lt;/span&gt; &lt;span class="ss"&gt;:hello&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;to: :greeter&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hello&lt;/span&gt;   &lt;span class="c1"&gt;# =&amp;gt; &lt;/span&gt;
&lt;span class="no"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goodbye&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>Catherine</author>
      <pubDate>Mon, 21 Mar 2016 10:01:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/29403</link>
      <guid>https://ruby-china.org/topics/29403</guid>
    </item>
    <item>
      <title>�Git 在这种场景中该如何处理</title>
      <description>&lt;p&gt;本地修改好代码后需要先测试，测试没问题后提交 git diff 文件审核，没问题-&amp;gt;提交，有问题-&amp;gt;修改-&amp;gt;审核-&amp;gt;提交。
但生成 diff 文件需要 add 进去，不能 commit。&lt;/p&gt;

&lt;p&gt;如果同时需要修改几个需求，有时测试或审核的人没在。我把 bug1 修改好了，add 进去，生成 diff，这时不能 commit（因为需要审核），这时我需要进入 bug2 的修改，或 bug3 的修改。怎么才能比较清晰的应付这种场景？&lt;/p&gt;

&lt;p&gt;我常常是修改完了自己审核一遍，没有问题了先不管，直接把 bug1，bug2 给 commit 了，然后开始修改 bug3.要是一起审核的时候发现有问题，我就直接再 commit 一个 fixbug 版本一起上传，但总感觉有点没对。。。&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Mon, 14 Mar 2016 10:33:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/29322</link>
      <guid>https://ruby-china.org/topics/29322</guid>
    </item>
    <item>
      <title>作为个今年才毕业的应届生，对于现在自己的情况想问问大家的意见。</title>
      <description>&lt;p&gt;公司去年 10 月才开始运作，当时来就想着反正才参加工作，条件苦点就当锻炼下吧。刚工作那天是周 5，周六直接睡到 10 点，HR 打电话来说怎么没来上班。那时我才知道公司是单休！也不知道是面试时只是“单休”两个字带过而已还是根本没有提，我也不记得是不是自己忘了。总之那是第一次感觉心酸...&lt;/p&gt;

&lt;p&gt;公司刚开始不配笔记本，让我前期用自己的，也没有补助什么的。我就用我 11 年学校团购的 sony vpecg 200c 电脑带着虚拟机来开发，稍微点错一下就要等 20-60 秒的响应时间。就这样用了 1 个半月的时间。
没有人言传身教的指导，老大在另外一个地方，他忙的话我遇到的问题只有自己解决，或者等他回复，或者弄其他的，等他晚上空了回复后晚上我再改改。&lt;/p&gt;

&lt;p&gt;最开始每天上下班光是路上都得耽误总共 4 小时，公司在一个仓库里，总监让我了解业务流程，在那边待了一个月。来了另一位做 ruby 的，我以为他第二天就可以来工作了，人事都开始跟他介绍业务什么的了。但 HR 说他可能觉得地方远，环境不好，待遇不好，以及不安静等原因最后没有来。然后就那一周，人事单独找我说毕业后就待这边吧，跟你的总监谈了他说你试用期结束后工资还会涨一些，毕业后大概会达到 5-6 左右。（之前说的是试用 2.8k，试用结束后购买社保，但个人要承担 300-400 左右）&lt;/p&gt;

&lt;p&gt;我不知道是因为另一个做 ruby 的来了又不干了的原因，还是本来就决定给我讲这个安排。但我觉得应该是前者。&lt;/p&gt;

&lt;p&gt;而我坚持了接近 2 个月，直到公司招到了一个前端，才搬到公司一位大股东的公司的办公地点，才有个稍微舒适点的工作环境。然后买了一台 3000 多的华硕笔记本（键盘还接触不良，自己跑到维修点去换的键盘模块）&lt;/p&gt;

&lt;p&gt;在别人公司办公，每天 10 块的餐补，一个月工作 26 天，餐补只发了 14 天的。当时想着算了，就回过仓库吃了最多 4 次饭，少几十块懒得去理论了。但之后因为赶进度，我跟前端每天加班到 10 点坐最后一班地铁回家。晚上加班没有餐补，没有加班费，没有调休。那个月可能人事看到我们打卡记录太晚，让我们调休了一天，但总监和老大都一样没在本地，不知道我们调休，出了需求一样得做。所以在这调休基本就是在家办公而已，我们不做，没有人做，老大只会在关键问题、服务器级别的问题才会处理下。&lt;/p&gt;

&lt;p&gt;这到春节了，除了祝福也没其他什么福利，晚上加班到傍晚没有餐补没有加班费，自掏腰包填肚子，每周单休，笔记本不好，- &lt;strong&gt;感觉到了春节我跟那位前端就像两条寄养在别人家的狗一样&lt;/strong&gt;，看着别人领大包小包的福利，自己什么都没。&lt;/p&gt;

&lt;p&gt;唯一能稍微让我感到好的是，我们在别人公司办公自然没人管我们，做完事玩玩游戏啥的也没关系，就是稍微自由一些。
因为也就 3 个月时间要回去毕业答辩，不是很想在这期间重新折腾找新工作，所以我想问问大家，我想拿到毕业证就跟总监谈条件，哪些福利或者条件是合理且应该有的。&lt;/p&gt;

&lt;p&gt;临近过节真的感觉挺心酸的。&lt;/p&gt;</description>
      <author>Catherine</author>
      <pubDate>Fri, 05 Feb 2016 12:59:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/28956</link>
      <guid>https://ruby-china.org/topics/28956</guid>
    </item>
  </channel>
</rss>
