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

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

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

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

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

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

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

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

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

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

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

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

  • 底下有rescue

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

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

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

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

  • Rust leetcode at 2017年1月18日

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

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

  • midori 百日记 at 2017年1月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的表。

  • 因为要用uglify.js压缩js代码

  • 按需取用吧,**的好处是以下情况可以正确捕获

    def t a = 1, b, **c
      p a,b,c
    end
    
    def t2 a = 1, *b, **c
      p a,b,c
    end
    
    t 1, a: 1      #=> 1   1            {:a=>1}
    t 1, 'a' => 1  #=> 1   {"a"=>1}     {}
    
    t2 1, a: 1     #=> 1   []           {:a=>1}
    t2 1, 'a' => 1 #=> 1   [{"a"=>1}]   {}
    

    行为各异,能用就好

  • https://ruby-china.org/topics/29703 用这个你还可以用lisp开发ruby,不用任何扩展

  • #5楼 @flemon1986 应该也行,还差个foreign_key,只是用Product还是用ReviewSummary来实例化的问题,反正avg_star肯定读的到的

  • 熊没了....

  • #3楼 @flemon1986 我找到办法了

    class Product
      has_many :reviews
      has_one :review_summary
    end
    
    class ReviewSummary < ApplicationRecord
      self.table_name = 'reviews'
      default_scope {
        from('products').
          joins('INNER JOIN reviews ON reviews.product_id = products.id').
          select('products.id as product_id, avg(stars) as avg_star')
      }
    
    end
    

    然后

    p = Product.includes(:review_summary).first
    p.review_summary.avg_star # => 平均评分
    

    这样就可以利用includes把统计数据都查出来了,生成的查询是这样的

    SELECT products.id as product_id, avg(stars) as avg_star FROM products INNER JOIN reviews ON reviews.product_id = products.id WHERE "reviews"."product_id" IN (1, 2)
    

    上面是用reviews.product_id用来做where条件的,可能有点巧合的感觉,一种更好的配法是

    class ReviewSummary < ApplicationRecord
      self.table_name = 'products'
    
      default_scope {
        joins('INNER JOIN reviews ON reviews.product_id = products.id').
          select('products.id as id, avg(stars) as avg_star')
      }
    
    end
    
    class Product < ApplicationRecord
      has_many :reviews
      has_one :review_summary, foreign_key: :id
    end
    

    生成的查询是:

    SELECT products.id as product_id, avg(stars) as avg_star FROM products INNER JOIN reviews ON reviews.product_id = products.id WHERE "products"."id" IN (1, 2)
    

    用products.id来写where正是我们想要的行为,完美。。这样虚拟出关联还是相当好玩的,不用create view了

  • #6楼 @mizuhashi 都说了Price类没有Bicycle的知识。。STI和多态关联是两套独立的系统,多态关联只要把STI相关的过程委托给STI的基类就可以了,根本不需要知道他有什么子类。。。

    你如果发现取不出正确的数据可以讨论一下,如果是觉得实现不爽,或者是哪里还要用数据表这个栏位,那你只能自己去改AR的查询代码,反正ruby有打开类,按你喜欢的实现就好了

  • #5楼 @Qcoder 多态关联存基类很正常....因为price没有bicycle的知识,他只能Car.find(1)然后再由Car根据type初始化成Bicycle,我觉得在有type字段的时候,应该能初始化出Bicycle,sql语句用car应该没啥问题

  • 这个不属于STI吧,如果是STI的话你的car表应该有type列,然后初始化的时候应该就会初始化成Bicycle

  • #1楼 @flemon1986 foreign_key有的,例如select products.id as product_id, avg(stars) as avg_star from products join reviews,可以把products_id作为这个表的外键