• 写了个benchmark ,如果只判断存在的话 present最慢。 判断完存在还要做别的事的话,present? 其实是最快的。 因为 exists any需要额外hit数据库,所以present 基本上好用一些 ,只判断存在性而不做其他操作的情况很少。

    Benchmark.ips do |x|
          x.report("present?") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.present?
            end
          end
          x.report("any?") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.any?
            end
          end
          x.report("exists?") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.exists?
            end
          end
          x.report("present? and pluck id") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.present?
              obj.pluck(:id)
            end
    
          end
          x.report("any? and pluck id") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.any?
              obj.pluck(:id)
            end
          end
          x.report("exists? and pluck id") do
            10000.times do
              obj = Employee.where.not(deleted_at: nil)
              obj.exists?
              obj.pluck(:id)
            end
          end
          x.compare!
        end
    
    

  • 安装 Homeland 启动报错 at 2019年04月07日

    Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use 看样子你本机的80端口已经被别的服务给占用了

  • 投了简历 没有回应,感觉像是雾件

  • 😏 ruby 最开始就是matz自己玩的语言,被别人拿来做生产工具 他也没想到

  • 那个 是 In deamand 不是需求量大,而是岗位少,做的人更少的必然结果,要说流行,国内 golang怎么也不可能超过 java php的

  • 😅 真讨厌,付费+邀请好友,我既没有钱,也没有朋友

  • 😅 问一下 ruby的工作是全栈 还是前后端分离的

  • 😅 我差点以为是招聘帖,白激动了一下午

  • 签合同是和哪个单位签

  • 是否可改造成递归方法 at 2019年02月21日

    😄 假设你有一个children方法,可以返回当前节点的所有子节点

    def descendants
          children.each_with_object(children.to_a) {|child, arr|
            arr.concat child.descendants
          }.uniq
        end
    # 假设当前借点是root 调用方法就是 root.descendants,这里返回的对象是AR数组,所以可以继续调用rails的方法
    

    其实这里你没有必要自己做 有一个gem acts_as_tree 帮你做这个功能

    或者你觉得在内存里面做这个不是很效率,如果你用的是PGSQL的话,也可以直接用WITH RECURSIVE 方法来把查询的事交给数据库去做

    #
    def descendants(*fields)
        subfields = fields.map { |e| "tablename.#{e}" }
    
        ApplicationRecord.connection.execute("
          WITH RECURSIVE descendants(#{fields.join(',')}) AS (
            SELECT #{fields.join(',')} FROM tablename WHERE id = #{id}
            UNION
            SELECT #{subfields.join(',')} FROM tablename JOIN descendants ON tablename.parent_id = descendants.id
          )
          SELECT * FROM descendants;
        ")
      end
    
    # 传入的参数是你需要返回的字段,假设你用parent_id 去表示你的employee 的父子关系 ,这个方法返回的数组,所以不能调用rails的方法