• @edokeh 这个字段是 rails 管理的,所以他不应该出现我描述的这种情况,除非有什么设计上的考量。 先删除就关联 再赋值 一样会有问题 因为赋值之后 counter 立即更新并持久化了 那我因为一些原因不把 resource 保存了呢?counter 还是会错的

  • @hysios 如果设置了 counter_cache 那么多对一的一端要求有一个字段来缓存多端的 size,这个字段是 rails 来管理的,在对多端进行 count/size 查询的饿时候 rails 会直接取这个字段 避免了 count(*) 操作

  • @hysios 从源码的逻辑看,确实写入数据库了,而且很有可能造成最终一致性问题 ar 的策略是 如果存在 counter_cache 那么在求 size 的时候会直接取 counter

  • @Ddl1st 没有啊,他就是这个行为,你读读源码就知道了

  • @Ddl1st 当然不是临时的。。。counter 的改动直接就写入数据库了,但是资源却不一定被持久化,这当然是问题

  • @xds2000 开了一个 issue 看看

  • 所以绝对不去什么外包公司...

  • @Ddl1st 不会 @edokeh 有这么一种场景,比如 post 属于 node1,然后把他移动到 node2 了,然后 counter 就乱掉了

  • 一行代码整垮 irb at 2013年01月18日

    @luikore 不知道你又没看过 wat 那个视频,同样的代码在 1.8 下正常,在 1.9 下就会发生问题, 里的解释是会触发 irb 内部的问题,所以搞的很困惑

  • 一行代码整垮 irb at 2013年01月18日

    @sailtsao - - 哪个。。。

  • 一行代码整垮 irb at 2013年01月18日

    @sailtsao 我用无形参的函数覆写有形参的 为啥要调用有形参的? 如果你说的情况会调用 method_missing,那么

    [1] pry(main)> def self.method_missing(*args)
    [1] pry(main)*   puts args.join(' ')
    [1] pry(main)* end
    => nil
    [2] pry(main)> xx oo
    oo
    xx
    => nil
    [3] pry(main)> def x(name);end
    => nil
    [4] pry(main)> def x;end
    => nil
    [5] pry(main)> x('abc')
    ArgumentError: wrong number of arguments (1 for 0)
    from (pry):6:in `x'
    

    如何解释?这里明显没有触发 method_missing

  • 一行代码整垮 irb at 2013年01月18日

    @sailtsaohttp://stackoverflow.com/questions/9491462/why-do-i-get-stack-level-too-deep-from-method-missing-in-irb-1-9-3 Defining it as a top-level method replaces BasicObject#method_missing, which probably affected some irb internals like Phrogz said. 这是一个 irb 内部的设计问题

  • 一行代码整垮 irb at 2013年01月18日

    @sailtsao 当然不是

    [jasl@localhost:~]$ pry
    [1] pry(main)> def x(name);end
    => nil
    [2] pry(main)> def x;end
    => nil
    [3] pry(main)> x
    => nil
    
  • 想买 Railscasts Pro at 2013年01月18日

    @aisensiy http://ruby-china.org/topics/7966 已经发完了亲~好几天前就在造势了

  • 想买 Railscasts Pro at 2013年01月18日

    刚送了 30 个三个月 coupon 出去。。。话说我自己的话基本只看 asciicasts 的 视频比较费时间

  • 一行代码整垮 irb at 2013年01月18日

    @luikore 大神有想法么?

  • 一行代码整垮 irb at 2013年01月18日

    @jjym @sailtsao 而且这个已经不是 ruby 的规矩了,不同的解释器对这句话的执行结果也是有差异的,可以在 pry、mri1.8、mri1.9 上试试定义def method_missing; end def method_missing(name, *args); end 等等,结果是不同的

  • 一行代码整垮 irb at 2013年01月18日

    @jjym 没参数怎么了?函数体里用不到 name 自然不需要参数嘛

  • @liuhui998 重新发送了,代码忘了加换行

  • @sundevilyang 一共有 41 人报名,除去第一波的 23 人,我从剩下的人中随机抽取了七人 把剩下的 coupon 发出去了

  • 一行代码整垮 irb at 2013年01月18日

    @ugoa 你重现一下看看抛得是什么异常。。。是ArgumentError你的 eval 根本就没执行到,如果栈溢出是抛SystemStackError

  • @jasonchi 因为我把活动举办的时间调到今天了 - -

  • 一行代码整垮 irb at 2013年01月18日

    @sailtsao 嗯,这样可以了,但是重载一般函数是不需要形参一致的吧?method_missing 是特殊么?

  • 一行代码整垮 irb at 2013年01月17日

    @ugoa 你说的不对 你可以在 irb 下发现(1.9.3)

    1.9.3-p327 :002 > def method_missing;end
     => nil
    1.9.3-p327 :003 > xx
    (irb):2:in `method_missing': wrong number of arguments (1 for 0) (ArgumentError)
        from /Users/jasl/.rvm/scripts/irbrc.rb:32:in `initialize'
        from /Users/jasl/.rvm/scripts/irbrc.rb:32:in `open'
        from /Users/jasl/.rvm/scripts/irbrc.rb:32:in `block in <top (required)>'
    (irb):2:in `method_missing': wrong number of arguments (1 for 0) (ArgumentError)
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:800:in `identify_identifier'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:731:in `block in lex_int2'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/slex.rb:236:in `call'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/slex.rb:236:in `match_io'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/slex.rb:75:in `match'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:286:in `token'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:262:in `lex'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:233:in `block (2 levels) in each_top_level_statement'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:70:in `block in start'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:69:in `catch'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:69:in `start'
        from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/bin/irb:16:in `<main>'
    

    在 pry 下发现

    [1] pry(main)> def method_missing;end
    (pry) output error: #<ArgumentError: wrong number of arguments (1 for 0)>
    [2] pry(main)> xxx
    CodeRay::Scanners::Scanner::ScanError:
    
    ***ERROR in scanner.rb:200:in `rescue in tokenize': wrong number of arguments (1 for 0) (after 0 tokens)
    
    tokens:
    
    
    current line: 1  column: 1  pos: 0
    matched: nil  state: "Error in CodeRay::Scanners::Ruby#scan_tokens, initial state was: :initial"
    bol? = true,  eos? = false
    
    surrounding code:
    nil  ~~  "xxx"
    
    
    ***ERROR***
    
    from (pry):1:in `method_missing'
    

    这个应该是和 ruby 的词法分析或者对象模型有关,具体的没深入研究过

  • @jasonchi 因为那里最开始的逻辑是为线下活动设计的 举办日期之前可以 join,当天可以 attend,以后就没了。。和线上这种发福利的节奏不太一样。。。

  • @limkurn 你应该没在最开始 join 成功的 23 人里,我在后台看到你了,等周五吧

  • @sundevilyang um。。。 总之我周五把剩下的 7 个名额发出去。。。。 评论里的人我没法获得 email 地址所以。。。

  • 一行代码整垮 irb at 2013年01月16日

    你的那种在 1.8 时是没问题的,在 1.9 会崩掉