• Maker.includes(:cars).where(car: {company_id: 'param1', status: 'param2'})
    

    company_id 如果有对应 model 的话还可以

    Maker.includes(:cars).where(car: {company: company, status: 'param2'})
    
  • 申请删帖 at 2017年06月04日

    先纠正一下,Ruby 是有 WeakRef 的,多看看文档源码。并且 ObjC 中的 weak 大部分时候解决的是循环引用,这个问题在 GC 中不存在

    另外 yield 本身存在更多的意义是编译器性能优化,类似 Swift 语言中,escaping block 和 unescaping block 的区别。如果不明确使用 &block 语法将 Block 转换为 Proc 对象的话,这时候 Block 不是一个对象,在大量存在 Block 的语言中这是一种性能优化。

    JS 中的 Promise 存在的原因是 JS 大量异步操作是依靠回调的,而且 Ruby 中大量 Block 的存在是为了写出更通用的函数,两个语言中的高阶函数想解决的问题并不一样。

    Ruby 和 Rails 在设计上要达到上层开发者爽,那么下层必然要付出更多的努力去实现元编程,这就是一种权衡。无论是 Lisp 还是 Ruby,包括 ObjC 的 Runtime,一切有元编程能力的语言都会带来底层代码维护难度增大的问题。应用构建可以选择自顶向下,像 Java,也可以选择自底向上,像所有支持元编程的语言那样,为你创造出一种新的写代码的可能性。

    Java 是个好语言,企业级一定是需要一个强类型系统的编译型语言的,但 Ruby 也不会死,弱类型语言后期一定是需要大量测试用例来保证鲁棒性的,这就是综合选择的问题了。

    最后,没人阻止你给方法起个好名字啊,Ruby 给你提供了可以更加接近自然语言的语法,但是你非得给人家起个 m1、a1这样的函数名…放在什么语言上你也看不懂它的调用流程啊(摊手)

  • 报名

  • 用 ActiveJob 的 async adapter 多好

  • 你这数组第一维的每一个子数组都是同一个指针引用。试试 Array.new 的时候传个 block 进去吧

  • 看了下没有讲到宏,Rust 作为一个静态语言最吸引我的还是可以用宏实现元编程。英文好的话还是建议看官方的英文版,比较完整

    https://doc.rust-lang.org/book/README.html

  • 报名

  • +1

  • 在 Rails 项目里使用 Graphql at 2017年02月06日

    可以理解为是一个增强版的 API view 层吗? 复杂的业务逻辑应该写在哪里? 有用在生产环境吗?感觉怎么样?

  • 不懂怎样才会有

    f1 #=> 0
    f2 #=> 20
    

    这样的效果。但是我实现了这样的效果

    f1 #=> 0
    f2 #=> 10
    
    i=0
    [:f1,:f2].each do|f|
      j = i
      define_method(f) do
        p j
      end
      i += 10
    end