@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 看看
所以绝对不去什么外包公司...
@luikore 不知道你又没看过 wat 那个视频,同样的代码在 1.8 下正常,在 1.9 下就会发生问题, 里的解释是会触发 irb 内部的问题,所以搞的很困惑
@sailtsao - - 哪个。。。
@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
@sailtsao 如http://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 内部的设计问题
@sailtsao 当然不是
[jasl@localhost:~]$ pry
[1] pry(main)> def x(name);end
=> nil
[2] pry(main)> def x;end
=> nil
[3] pry(main)> x
=> nil
@aisensiy http://ruby-china.org/topics/7966 已经发完了亲~好几天前就在造势了
刚送了 30 个三个月 coupon 出去。。。话说我自己的话基本只看 asciicasts 的 视频比较费时间
@luikore 大神有想法么?
@jjym 没参数怎么了?函数体里用不到 name 自然不需要参数嘛
@liuhui998 重新发送了,代码忘了加换行
@sundevilyang 一共有 41 人报名,除去第一波的 23 人,我从剩下的人中随机抽取了七人 把剩下的 coupon 发出去了
@ugoa 你重现一下看看抛得是什么异常。。。是ArgumentError
你的 eval 根本就没执行到,如果栈溢出是抛SystemStackError
@jasonchi 因为我把活动举办的时间调到今天了 - -
@sailtsao 嗯,这样可以了,但是重载一般函数是不需要形参一致的吧?method_missing 是特殊么?
@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 地址所以。。。
你的那种在 1.8 时是没问题的,在 1.9 会崩掉