• 请教一个 sql 的问题 at 2018年02月12日

    如果先排名后分页,你需要 window function :

    select
      user_id,
      score,
      dense_rank() over (order by score desc) as rank
    from exam_result
    order by score desc, id asc
    limit 4
    offset 2;
    

    如果先分页后排名,把上述查询改成子查询就行:

    select *, dense_rank() over (order by score desc) as rank
    from (
      -- select, limit, offset
    ) t
    

    或者用分页完成后在 Ruby 层面算。

    https://www.postgresql.org/docs/current/static/tutorial-window.html https://www.postgresql.org/docs/current/static/functions-window.html

  • 上面已经说得差不多了,我补充一点。对于一些小修改不需要频繁发布大版本,只要不改 payload 属性名称和值类型一般不会破坏客户端应用。可以新增属性或 API ,然后在客户端的新版本里使用,冗余部分积累到下个大版本一起清理掉。

  • 基本上是 Rails 全栈思路的延伸:

    1. 模板靠后端渲染,erb 加各种 helper ,最大限度的利用 Rails 的 view 层
    2. 数据放在 data attribute 里
    3. Stimulus 提供基本的组织架构,也即是 controller ,并托管它们的生命周期

    总而言之,它为页面的 JavaScript 代码提供了一个统一且规范的组织,但做点正经事情还是的得配合 Rails 已有的各种方便功能(还有理念)。如果你的代码组织问题是 Rails 的 SJR 带来的 JavaScript 代码碎片化,它也帮不上什么忙。

  • Linux、Ruby 不冷没天理! at 2018年01月30日

    我差点以为自己进的起点…… LZ 快设计一门语言把 Ruby 摧枯拉朽的干掉

  • Rails 的一个 controller action 为整个页面提供数据,因此很多页面都不止一个实例变量。

    比如:

    1. 一个 index 页面,有几个筛选的下拉框
    2. 一个 show 页面,也有几个下拉框,比如关联属性的取值范围

    这些都是很正常的需求。你当然可以把主要资源之外的数据全放在一起,比如 hash ,但这只是为了强行满足所谓的规范,没多大实际意义。为多个资源合理的命名更有利于维护。

  • Elixir Style Guide at 2018年01月11日

    👍 这个好像是最接近官方风格的那个 style guide ,翻译还是很有价值的。准备等 1.6 出了正式版就升级过去的。

  • @Jao 这算是最容易维护,以后也最少改动的方式。控制一下异常捕获的类型和范围就行。

  • 这其实是两个问题:

    1. 前端如何去查询进度
    2. 后端如何更新进度

    前端基本就是 web 接口的事情,可以用 REST API 定期轮询也可以用 Websocket 来推送。两者代码量其实差不多。

    后端需要的是持久化一个 job 的 id, state, progress ,至于是放在 Redis 里还是 RDBMS 也都无所谓。只要实际干活的后台任务定期更新 job 就好。我现在更倾向于 RDBMS ,因为 job 这种数据往往以后还需要查询到,也有可能附加其他信息(导入时间/完成时间,关联的资源等)

    之所以这么说,是因为后端的 progress 如何更新跟前端如何获取数据没有关系。比如后端通过 background job 在导入完成后更新 job progress ,但给前端的接口仍然是 REST API 。或者后端用 ActionCable 封装一个 Websocket 接口,但在 channel 内仍然是轮询获取最新进度。

  • 无聊翻了下书,貌似出现 Song object 的很少,第一次出现的是这个地方:

    虽然看不清楚代码和普通文字是否有字体差异,但我觉得这个地方用 Song object 也算合理和容易理解。因为代码里也只有一个类,Song object 算是个泛指。

  • @jasl Medium 和简书都不支持代码高亮吧。还得贴 gist 链接。除此之外都不错。