我的问题
我们正在为小型企业开发本地托管的Web应用程序。我们还有一个演示网站,可让潜在客户四处寻找评估产品。现在,所有使用演示站点的客户都可以访问相同的数据,这可能不太理想,因为他们可能会在彼此后面进行修改,这会让应用程序感到“不稳定”,如果他们注意到的话。我想为每个客户提供他们自己的数据子集来改善他们的体验。向我的所有模型添加user_id列很简单,但现在我需要确保所有查询都使用这个新关联。
解决问题的艰难方法
我可以手动完成并将@people = Person.all
之类的通话更改为@people = current_user.people
,但是蹩脚!主分支的开发工作仍在继续,当我合并到演示分支时,我不希望看到每个查询。
我想做的事情
我想在我的application_controller中创建一个around_filter,它将获取我的查询并添加这个额外的范围层,如下所示:
around_filter :scope_on_current_user def scope_on_current_user(&block) MagicalClass.scope_on_user(current_user, &bock) end
这是我从octopus得到的一个想法,它是一个数据库分片宝石。我查看了他们的源代码,看起来很毛茸茸。他们几乎肘击深入ActiveRecord,劫持数据库连接等等。我希望这对我想要的东西来说太过分了。关于MagicalClass
如何运作的任何建议? :)
Rails 3.1.0
ActiveRecord 3.1.0
答案 0 :(得分:0)
有一些补丁允许默认范围采用过程see here for details,现在它可以在没有任何补丁/宝石的情况下工作。
与Thread.current
相结合可能足以让你前进。
那说......对于单独的DB采取多租户方法可能更有意义吗?