• cool,那个 class 和 def 是用宏做的吗?

  • 物理机 ubuntu 无桌面环境 i3wm

  • 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。。

  • 有人一起 Mastodon 吗? at 2017年04月08日

    搞好了,是 nginx 里要用 fullchain.cer,之前用错了。。

  • 有人一起 Mastodon 吗? at 2017年04月08日

    建了一个 [email protected],能看到吗?

    好像别人都看不到我,不知道哪里搞错了。。。

  • ruby 有个钩子叫 method_added,然后拿到名字以后,用 instance_method 把方法拿出来,再 bind(xx).call 就好了,这样可以不用写 eval 字符串(虽然可能更快)

  • 发两次请求还有一种可能是 chrome 插件导致的,可以开隐身窗口排查一下

  • 但是 ruby 的核心之一是打开类,在运行时修改类定义,所以编译期查找方法是不可能的;假如需要缓存方法路径,现在也可以缓存,这个和有没有类型应该没关系。

    另外 matz 很讨厌 java 那种手写 types,ruby 不可能会做成 java 这样的。。Ruby3 大概会给你照 respond_to?推一下,类 ruby 的静态类型语言可以参照 crystal,但是我觉得没有意义,想真的要享用类型系统的好处的话,还是建议去用 rust 或者 haskell。。。

  • 用 Ruby 做编译原理大作业 at 2017年03月14日

    嗯。。类型定义应该要先跑一遍。。宏的话我自己都还不会用= =

  • 有了类型之后又会想要积类型 和类型,递归类型,依存类型。。。在没有完美的类型体系之前我觉得鸭子类型才是最好的。。。

  • Ruby China 正在衰退吗? at 2017年03月12日

    能跳 js 和 go 说明不懂 ruby 的一分一毫啊...

  • 求推荐机械键盘 at 2017年03月04日

    红轴比茶轴好。。茶轴杂音多而且毛毛的触感,你喜欢轻的话茶轴会不够轻,品牌可以随意,只要是 cherry 原厂轴就行

  • md5 是摘要算法,不可逆,1g 的文件 md5 也是 32 个字符

  • 嗯,你可以用 htop 看看内存使用情况,一般而言 128m 对 rails 进程是不够的,刚刚试了一下,一个空的 rails 项目,开发环境启动就要 68M,进行一个空页面的请求之后已经 96M 了。

  • 读 RubyGems 源码遇到的问题 at 2017年02月28日

    底下有 rescue

  • 128m…估计炸得不能再炸了……

    如果项目大,开发环境渲染 views 确实可以占到几秒甚至十几秒,但是我觉得你这个应该是爆内存然后跑到 swap 导致慢

  • 正常来讲不是应该一个 api 一个域名么。。不然怎么区分哪个 url 是哪个用户的,难道添加的时候先检查占用?所以直接开多个 Rails 应用,然后把数据库里的路由导入成 rails 路由就可以了。。。

    另外我觉得这个 controller 怎么设计也还很多疑问,如果开应用成本太高,不一定要用 rails 的。。

  • Rust leetcode at 2017年01月18日

    感觉开 repo 和发帖对于刷题来说就是 flag 一样的存在....

  • #9 楼 @kimmg 传 nil 是不可能报 argument error 的,他的 cart.rb 写的有问题,报错在 cart.rb:2

  • midori 百日记 at 2017年01月14日

    yehuda 的博客说过 ruby 的 db adapter 在多线程下都是不会阻塞的,file 的话不清楚,如果对 file 的接口做同样的处理,那么是不是即使不用 em,普通的多线程也可以把 cpu 跑满呢?

  • 当你有几个子类要继承同一个父类,但是并不是 STI 的时候,在父类声明 abstract_class,在子类声明各自的 table_name http://api.rubyonrails.org/classes/ActiveRecord/Inheritance/ClassMethods.html

    ApplicationRecord 就是个 abstract class,他是 ActiveRecord::Base 和你的实际 model 中间的一层,使你对 ApplicationRecord 的扩展不会影响 ActiveRecord::Base。而要做到这个,常规情况你需要有个名为 application_records 的表。