• 招募项目合伙人 at 2017年07月21日

    LZ 既然能改变世界,为什么非要花这么多时间在这里跟你眼中的“智障”撕😅

  • 我觉得跑个脚本处理一下旧数据比较好吧😅

  • 最近在项目上用上 graphql 了,感觉 graphql-ruby 已经比较完善,用起来没遇到什么较大的问题。而且 graphql 是支持自省的,因此生成文档很方便,假如前端熟悉 graphql 的话甚至不需要文档。所以就不用担心文档忘了更新的情况了。要说缺点的话,目前我觉得最大的问题就是 Graphql 的过于复杂,非常多的定义,从啃文档到开始实现花了我两天多的时间😂 。我认为这也是 graphql 并不怎么火的原因,后端去定义一套 Schema 需要理解 Graphql 大部分定义,否则用起来可能还没直接写 API 方便。(PS:之前也用过API expand的方式去提升接口灵活性,但一方面自己开发还是比较花时间的,另外灵活性也比不上 graphql,所以比起来我认为 graphql 更好)

  • http://guides.ruby-china.org/i18n.html (PS:这是 rails5.0 版本的文档,可能跟其他版本有些不同)

  • 最近也在开发环境下试了一下,不用搭环境了确实很方便,但是开发不太爽,例如 pry 用起来有点麻烦,mac 桌面版使用 volume 严重影响运行速度 (edge 版解决了,但 stable 还没发😂 )。现在项目使用 capistrano,还要把 ssh key mount 过去。使用webpack-dev-server应该要另外配置 (这点还没看..)。不知道大家是怎样解决的~

  • 用 passenger 的话,建议参考官网提供的文档安装,这样就可以使用包提供的 services 来启动和停止了

  • 稍微看了一下options_for_select的源码,如果你第二个参数传数组的话其实是变成将 value 为shippedapply_refunded的选项选中。假如你想让 helper 来生成的话,建议不要使用数组来作为 value,否则只能用 js 来操作了。

  • 从 log 看 state 的值被转成字符串了,看上去是 json 字符串,你可以在 controller 转成数组

    JSON.parse(params[:state])
    
  • 先检查一下渲染出来的表单 URL 是否正确

  • 我看错了,以为你的参数是:file。现在的代码看不出问题,你贴下后台报什么错。

  • 你把 log 贴一下

  • 你用file_field方法生成的 input 元素参数名会带上资源名称的,name 应该是web[file],所以你访问参数的话需要用 params[:web][:file]。另外file_field方法会为外层form_for生成的表单加上multipart/form-data属性,所以你不用手动添加。参考文档

  • 👍 学到了

  • gitlab-ci 还没尝试过。Jenkins 也可以用 docker 简化环境配置,但假如把任务迁到另一个 Jenkins 上,确实是有不少东西要重新配置😓

  • 支持

  • 分母 + 1😂

  • vim + 1

  • 👍 👍 。另外还可以加上 Rubocop 和 SimpleCov 的插件检测代码质量和测覆盖率。之前也用 jenkins + bitbucket 搭了这样的 CI 环境,可惜在团队里面推不起来😂

  • Vim 8.0 发布了 at 2016年09月13日

    😁 😁

  • Rails 5 架构深入理解 at 2016年08月30日
  • Rails 5 架构深入理解 at 2016年08月30日

    #1 楼 @lyfi2003 请问“0 到 1 构建 Rails”这个教程的标题是什么?我试着搜了一些标题都找不到😂

  • ACzero😅

  • 求一个 SQL 的写法 at 2016年07月26日

    #5 楼 @hw676018683 噢噢,理解错意思了。可以这样写 B.select('a_id, COUNT(id) as match_count').where("(column1 = 'a' AND column2 = 100) OR (column1 = 'b' AND column 2 = 101)").group('a_id') 只有 match_count 等于 2(其实就是条件数)的记录才是满足所有条件的。

    补充: 加上having就能直接筛选出符合条件的记录了: B.select('a_id, COUNT(id) as match_count').where("(column1 = 'a' AND column2 = 100) OR (column1 = 'b' AND column 2 = 101)").group('a_id').having('COUNT(id) >= 2')

  • 求一个 SQL 的写法 at 2016年07月26日

    B.where('(column1 = a AND column2 = 100) OR (column_1 = b AND column)') 这样能把需要的 A 都查出来了吧,条件再多也只要增加 where 的条件,不用增加查询次数。

  • 看看get的源码:

    # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L650
    
    def get(*args, &block)
      map_method(:get, args, &block)
    end
    

    你说的两种写法传递的参数是不同的

    get 'path', to: "controller#action"
    # args = ["path", {:to => "controller#action"}]
    
    get 'path' => 'controller#action'
    # args = [{"path" => "controller#action"}]
    

    往深一步看:

    # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L687
    
    def map_method(method, args, &block)
      options = args.extract_options!
      options[:via] = method
      match(*args, options, &block)
      self
    end
    
    # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L1470
    
    # match 'path' => 'controller#action'
    # match 'path', to: 'controller#action'
    # match 'path', 'otherpath', on: :member, via: :get
    def match(path, *rest)
        ......
    end
    

    match方法太长就不贴了,extract_options!是 rails 给 Array 扩展的方法,若数组对象最后一个元素是 hash 对象,就对这个数组调用pop并返回pop的返回值。实际上get是在match方法上做了一层封装。这样的话这两种写法传到match方法的参数是这样的:

    get 'path', to: "controller#action"
    # path = "path"
    # rest = [ { :to => "controller#action", :via => :get } ]
    # 等于调用了 match "path", to: "controller#action", via: :get
    
    get 'path' => 'controller#action'
    # path = {"path" => "controller#action", :via => :get}
    # rest = []
    # 等于调用了 match "path" => "controller#action", via: :get
    

    然后match方法对这两张情况都做了处理,在这一段。实际上这两张写法都是一样的。不过正如 5 楼说的,ruby 从 1.9 后加入了{ key: 'value' }这样的写法并推荐这样写,所以推荐上面那种写法

  • #3 楼 @pp158825968 放到 lib 里,然后在 config/application.rb 下将 lib 文件夹加到 rails 的加载路径中:

    # config/application.rb
    
    module YourAppName
      class Application < Rails::Application
        # 将lib文件夹加到rails的加载路径中
        config.autoload_paths << Rails.root.join('lib')
      end
    end
    

    这样的话不需要执行require 'bill_test'也能直接使用了

  • 一般都标的是税前,除了税收外个人还要交一部分社保,到手多少要自己算