• 查了下,不同的子域名的确是被判断为 Same-Site 的,也应该这样子做。不过本地要测试的话就不行了,看了下有个 gemrails_same_site_cookie 的,这个用了中间件,试了的确可以设置成功,不过作者说到 2022 年 chrome 就不再支持第三方 cookie 了,到时候类似的 gem 都会失效。新版本的 safari 也不支持第三方 cookie 了,所以最好还是放在同一个父域名下吧。thx😀

  • 试了下,:None,'None' 结果都是一样的,这里用的是 https ,secure 的话上面的配置文件已经判断了,如果是 https 的话就是 secure,还是不行

  • 就像楼上说的,一般直接用is_a?判断就行了,像你说的handle_arr调用了handle_str的那种情况,也不冲突,看上去就像是:

    def handle(obj)
      if obj.is_a? arr
        handle_arr(obj)
      elsif obj.is_a? str
        handle_str(obj)
      else
        # do_something
      end
    end
    
    def handle_arr(list)
      list.map { |item| handle_str(item) }
    end
    
    def handle_str(str)
      # do_something
    end
    

    有些情况下,用respond_to?可以获得更好的扩展性,也就是鸭子类型的用法,这里用一个别的例子:

    def handle(file)
      filename = if file.repond_to? :to_path
                   file.to_path
                 elsif file.is_a? String
                   file
                 else
                   # log and raise type not suported exception
                 end
    
      File.open(file, 'w')
      # do_something
    end
    

    这样不仅可以处理File类型的对象,还可以处理其他带有to_path方法的对象。

    当然最理想的情况是直接让参数自己做处理,也就是人们经常说的 Tell, Don't Ask ,比如说

    class StringLike
      def handle
        # do_something
      end
    end
    
    class ArrayLike
      def handle
        # do_something
      end
    end
    
    def handle(obj)
      obj.handle
    end
    
    array_like = ArrayLike.new
    string_like = StringLike.new
    
    handle(array_like)
    handle(string_like)
    

    扯远了,说起类型检测就条件反射了

  • 不是 windows 对软件开发者不友好么🤔

  • 抛开实现谈设计,talk is cheap.