#9 楼 @pathbox 这种情况最直接的解决办法是替换掉 id 的调用。monkey patch 之后改变了原来接口的行为,后来维护楼主项目的人估计又得开帖骂楼主了...
再次强调一下:
monkey patch 的应用场景主要是在外部
plugin 不提供相应API接口
的情况下去修复 plugin 的行为或 bug。
楼主的这种 monkey patch 的使用方式上这样的:我自己的代码有问题,不想去修改,反而去改变 AR 的接口行为。这里其实就产生了 Tech Debt,这个债要谁来还呢,应该是下一个接手项目的人...
楼主说还存在一些小问题
,其实就是一个小炸弹,不修改 revision 相关的代码还好...
另,楼主一直强调没有测试,其实我觉得不写测试和没有测试就不会改代码都是病。
rename id => fake_id 然后替换原有的 id 调用为 fake_id. monkey patch 是在继续挖坑。
比方说我经常会得到这种错误:ActiveRecord::UnknownPrimaryKey in ResourceRevisionsController#some_method
原因大概是你去 update 了那条没 primary key 的记录,修改代码,改成AR.connection.execute("update xxx set xxx = xx where xx = xx and xxx = xxx;")
如果我这样做了会有什么副作用么?
没副作用,多了一个 int column 而已。其实一般中间表,我也喜欢加一个主键上去,大部分时候中间表还是需要手工维护的,从没有再到有的过程需求迁移一次,好麻烦,直接加上也不占多少空间...而且像 has many through 这种结构还可以改变查询方式。不加只能一个 join 查询,加了之后可以 has many + in 查询,分页和 top N 情况好很多。
Padrino 已经不是很活跃了,还没出 1.0
Lotus 才是未来...
不错,支持,今天斗鱼看了一晚萌妹子
也就是说不用真的执行赋值,只要 Ruby 解析器能看到某个名字出现在赋值符号的左边就够了,就会创建一个这个名字的变量,未赋值时值为 nil。
zhihu-style
如果不把订单设置一个过期标识,存在两个问题。
之前有过一个类似的需求:http://hooopo.iteye.com/blog/757760
然而,DHH 早已看穿了这一切。
这就是人工智能啊
#2 楼 @xiaoronglv alias_method_chain 就是 DHH 对你说的 Around Alias 的一个封装,之前广泛应用在 Rails 内部。 曾引起群众的不满,群众表示这可以用 super、prepend、subclass 等更 OO 的方式替代。
现在的应用场景就是 3 楼所说的。在不修改原有接口的情况下,改变不归你管的接口的行为。当然,如果你想引入新接口的话就可以不用这么麻烦。比如:
User.find -> User.find_with_foo
这就是 alias method chain pattern…
hr 还不换头像?
两只手就数出来的,,还要什么 mongodb ES Redis..
消灭 0 回复
SLC 可以自动完成这个功能:
对于 N+1 情况,照常使用 includes:
https://github.com/csdn-dev/second_level_cache/commit/e885dae732b920012c51016b0715f049b66f0776
似乎很有用啊,可以拿来自动收集黄图...
自己的作业自己做咯