第一题:大家很积极,也非常不错。
第二题:好像除了 lgn21st 、cclong 和 blackanger ,其他人并没有太多人参与。
lgn21st提供一个很不错的想法,这里也可以将 blackanger的想法继续改进下。
module ActiveRecord
class Base
alias old_method_missing method_missing
#譬如我们这里截取到 comment.user_login
def method_missing(name, *args)
#简单的忽略一些条件,我们不处理没有“_”的,也不处理find开头的
if name.to_s=~/_/ && name.to_s !~ /^find/
#分割user和login
c, m = name.to_s.split('_')
#m不为空,且当前有c这个属性,在这里即具有user这个属性
if !m.nil? && respond_to?(c.to_sym)
#获取user的值
obj = self.send(c.to_sym)
#如果user不为空, 且有login这个属性,,返回之
obj.send(m.to_sym) if !obj.nil?&&obj.respond_to?(m.to_sym)
end
else
#调用原有的method_missing
old_method_missing name, args
end
rescue
#调用原有的method_missing
old_method_missing name, args
end #end method_missing
end #end Base
end #end AR这个可以直接放到 config\initializers 即可。
大家的答案非常精彩,内容有点多,我需要整理,我需要点时间,请稍等。我更期待大家一起来参与:)