• vim + 1

  • 👍 👍 。另外还可以加上Rubocop和SimpleCov的插件检测代码质量和测覆盖率。之前也用jenkins + bitbucket搭了这样的CI环境,可惜在团队里面推不起来😂

  • Vim 8.0 发布了 at 2016年9月13日

    😁 😁

  • Rails 5 架构深入理解 at 2016年8月30日

    #13楼 @lyfi2003 谢谢😉

  • Rails 5 架构深入理解 at 2016年8月30日

    #1楼 @lyfi2003 请问“0到1构建 Rails”这个教程的标题是什么?我试着搜了一些标题都找不到😂

  • ACzero😅

  • 求一个 SQL 的写法 at 2016年7月26日

    #5楼 @hw676018683 噢噢,理解错意思了。可以这样写 B.select('a_id, COUNT(id) as match_count').where("(column1 = 'a' AND column2 = 100) OR (column1 = 'b' AND column 2 = 101)").group('a_id') 只有match_count等于2(其实就是条件数)的记录才是满足所有条件的。

    补充: 加上having就能直接筛选出符合条件的记录了: B.select('a_id, COUNT(id) as match_count').where("(column1 = 'a' AND column2 = 100) OR (column1 = 'b' AND column 2 = 101)").group('a_id').having('COUNT(id) >= 2')

  • 求一个 SQL 的写法 at 2016年7月26日

    B.where('(column1 = a AND column2 = 100) OR (column_1 = b AND column)') 这样能把需要的A都查出来了吧,条件再多也只要增加where的条件,不用增加查询次数。

  • 看看get的源码:

    # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L650
    
    def get(*args, &block)
      map_method(:get, args, &block)
    end
    

    你说的两种写法传递的参数是不同的

    get 'path', to: "controller#action"
    # args = ["path", {:to => "controller#action"}]
    
    get 'path' => 'controller#action'
    # args = [{"path" => "controller#action"}]
    

    往深一步看:

    # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L687
    
    def map_method(method, args, &block)
      options = args.extract_options!
      options[:via] = method
      match(*args, options, &block)
      self
    end
    
    # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L1470
    
    # match 'path' => 'controller#action'
    # match 'path', to: 'controller#action'
    # match 'path', 'otherpath', on: :member, via: :get
    def match(path, *rest)
        ......
    end
    

    match方法太长就不贴了,extract_options!是rails给Array扩展的方法,若数组对象最后一个元素是hash对象,就对这个数组调用pop并返回pop的返回值。实际上get是在match方法上做了一层封装。这样的话这两种写法传到match方法的参数是这样的:

    get 'path', to: "controller#action"
    # path = "path"
    # rest = [ { :to => "controller#action", :via => :get } ]
    # 等于调用了 match "path", to: "controller#action", via: :get
    
    get 'path' => 'controller#action'
    # path = {"path" => "controller#action", :via => :get}
    # rest = []
    # 等于调用了 match "path" => "controller#action", via: :get
    

    然后match方法对这两张情况都做了处理,在这一段。实际上这两张写法都是一样的。不过正如5楼说的,ruby从1.9后加入了{ key: 'value' }这样的写法并推荐这样写,所以推荐上面那种写法

  • #3楼 @pp158825968 放到lib里,然后在config/application.rb下将lib文件夹加到rails的加载路径中:

    # config/application.rb
    
    module YourAppName
      class Application < Rails::Application
        # 将lib文件夹加到rails的加载路径中
        config.autoload_paths << Rails.root.join('lib')
      end
    end
    

    这样的话不需要执行require 'bill_test'也能直接使用了