ActiveRelation准备好迎接黄金时段吗?

时间:2011-05-03 08:11:48

标签: sql ruby-on-rails database activerecord

我只是在学铁路。我非常喜欢Rails。几乎在所有情况下,它都彻底摧毁了Java和相关的生产力解决方案 - 而且我真的非常喜欢Java拥有十多年的经验......所以说了些什么!如果铁路没有这样做的话,那里有一块宝石会让我不知所措的效率。

然后是积极的关系。我正在努力使用它作为我的主要查询方法,但它是一个禁忌。我发现一旦我开始构建需要2个连接的查询,我就会开始得到一些没有意义的奇怪错误消息......老实说,所有范围都很难推理。

虽然这种方法可能会让事情变得更具可读性,但我认为从大局角度推断出正在发生的事情的成本......以及编写查询的成本......可能并不能为此付出代价。如果你真的擅长sql ...或像hql这样的语言......这种做事方式实际上是一种生产力损失。至少这对我来说。

我可以忍受它,但我不能让嵌套连接工作。例如,如果我有A< - > B< - > C,并且B是也是多对多关系的模型,则ActiveRelation抱怨其中一个外键的名称是错误的...甚至虽然它确实是正确的。我认为这是一个错误。使用作用域进行单连接的所有查询都可以完美地工作......但是如果将这些相同的作用域组合起来进行2次连接,则会失败。我认为没有办法解决它。

我可以做其中一个连接,然后让ORM为我做剩下的工作......但这会浪费性能。对于一个大型网站而言,这将以灾难告终。我正在编写一个庞大的系统,每个请求存储数千个关系数据树。使用ORM遍历图形只是一个性能杀手,我甚至不会继续编写应用程序的其余部分。如果是这种情况,我可能不得不回到Java。

除此之外,我在网上找不到任何多个连接的例子。甚至文档也几乎没有提到加入和合并。

那么......黄金时间准备好了吗?如何在Rails中真正复杂的7-9表连接? Rails是不是为此而建的?我只是问这个,因为如果Rails无法处理这种类型的查询,我将不得不停止使用它...并相信我......这是一个巨大的,真正的耻辱...因为我绝对喜欢其他一切。我真的希望我错了,一切都很好。

1 个答案:

答案 0 :(得分:3)

说实话,我可以稍微谈谈,但事实是我们大多数时候都不知道如何处理事情而感到沮丧。 Rails具有陡峭的学习曲线,就是一个很好的例子:)我试图做一次左外连接,它看起来很混乱,只是发现我可以用更干净的方式来做。

一旦你学会了如何指导它,Rails实际上可以做各种各样的连接(根据我的经验,这确实是一个挑战)。

我发现有时使用一点Ruby会使程序更容易。一张小地图可能只会保存整件事。

然而,当你无法做某事时,并不是因为Rails不会处理它,而是因为你还没有正确的知识。 Rails很难,有些事情似乎很不清楚,只是因为你一开始并不了解它们。

关于A,B,C的事情,应该可以正常工作。很可能(如果不确定),你在命名密钥时做错了(你可以100%确定它不是一个Rails错误:)