我有一些像这样的代码:
u = ... some user ...
u.clubs << Club.new(:name => "Stu's house of Disco")
使用连接模型,通过上述方式自动创建的ClubMembership。
到目前为止,这么好。但是,出于安全原因,用户具有在内存中而不是在数据库中的属性,并且当“&lt;&lt;&lt;”方法触发,它从数据库中重新加载用户,从而炸掉ClubMemberships中的一些代码#after_create,这取决于用户的秘密解码器环完好无损,当它从新装载时它没有数据库。这看起来有点奇怪:为什么当我们有一个非常好的坐在那里时它会加载用户?更重要的是,有没有办法解决这个问题,还是我们只需要为用户创建自己的add_club方法?
答案 0 :(得分:0)
这是我们所做的。这是一个丑陋的黑客行为,欢迎出色的解决方案。
我们在User中创建了一个@@ secret_decoder_ring类变量,其中一个哈希链接了对象的ID和秘密的非DB信息,因此如果有问题的对象已经被看到并且有秘密数据填写后,将来可以看到。
实际上,我们只希望可见性是在Rails中处理的请求的持续时间,因此我们有一个post_filter来擦除相关数据。
丑?是的,但它暂时完成了工作。