• MainCombinePackageItem.joins('INNER JOIN packages main_package ON main_package.id = main_combine_package_items.main_package_id')
                          .joins('INNER JOIN packages combined_package ON combined_package.id = main_combine_package_items.combined_package_id')
                          .where('main_package.state NOT IN ? or combined_package.state NOT IN ?', [9, 10], [9, 10])
                          .where(warehouse_id: 1)
    

    像楼上说的not in如果用不到索引的话,可以改成in,一共有哪些状态是知道的

  • rails在joins和eager_load同一个表的时候会加上别名的:

    MainCombinedPackageItem.joins(:main_package, :combined_package)
    
    SELECT "main_combined_package_items".* FROM "main_combined_package_items" INNER JOIN "packages" ON "packages"."id" = "main_combined_package_items"."main_package_id" INNER JOIN "packages" "combined_packages_main_combined_package_items" ON "combined_packages_main_combined_package_items"."id" = "main_combined_package_items"."combined_package_id"
    

    第二个packages表加了combined_packages_main_combined_package_items的别名,可以直接在where用,但是我觉得这样不好,干脆直接写sql或者用把sql拆成手写的joins() where()

  • 惊了可还行,怕不是真实猛男(滑稽

    不过ruby用的不是引用计数,是mark and sweep: http://blog.jobbole.com/60900/

  • 只要记住ruby里传递的永远是引用就好了,包括数字传的也是引用,不提供代码块,只提供一个对象引用的话,这个对象不一定是可复制的(虽然数组可以),所以Array.new肯定不会帮你复制

  • 嗯,我看看

  • 有具体点的信息吗?

  • Map for hash array using &: at 2017年04月30日

    反正Array#to_proc也没人用,自己定义一个就好了

    class Array
      def to_proc
        ->(x){ x[first] }
      end
    end
    
    p [{aa: 1}, {aa: 2}].map(&[:aa]) #=> [1, 2]
    
  • 我觉得你应该要用的是GetForegroundWindow,参照 http://stackoverflow.com/questions/10740143/get-current-active-window-title-in-c GetActiveWindow 只能get你自己进程里的。

    另外win32api和dl已经deprecate,建议使用fiddle或ffi:

    require 'fiddle'
    require 'fiddle/import'
    require 'fiddle/types'
    
    module User32
      extend Fiddle::Importer
      dlload 'user32'
      include Fiddle::Win32Types
    
      extern 'HWND GetForegroundWindow()'
      extern 'int GetWindowText(HWND, char*, int)'
    end
    
    title = "\0" * 255
    hwnd = User32.GetForegroundWindow
    length = User32.GetWindowText(hwnd, title, 255)
    p title[0...length]
    
  • ancestry不能includes和eager_load,会多很多n+1查询的。。closure_tree可以把grandparent之类的实现成真正的关联,用起来方便很多

  • Slimming-Controllers at 2017年04月11日

    十行不到的代码也能yy出这么多pattern。。