Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ActiveRelation在黄金时段准备好了吗?_Sql_Ruby On Rails_Database_Activerecord - Fatal编程技术网

Sql ActiveRelation在黄金时段准备好了吗?

Sql ActiveRelation在黄金时段准备好了吗?,sql,ruby-on-rails,database,activerecord,Sql,Ruby On Rails,Database,Activerecord,我只是在学习rails。我非常喜欢Rails。几乎在所有情况下,它都会彻底破坏Java及其相关解决方案的生产效率——而且我对Java有着超过十年的经验,我真的非常快。。。这说明了什么!如果rails不能做到这一点,那么我的脑海中就会闪现出一颗宝石,它是多么高效 然后是积极的关系。我非常努力地使用它作为我的主要查询方法,但这是不可能的。我发现,一旦我开始构建需要2个连接的查询,我就会收到奇怪的错误消息,这些消息毫无意义。。。老实说,所有的范围都很难解释 虽然这种方法可能会使事情更具可读性,但我认为

我只是在学习rails。我非常喜欢Rails。几乎在所有情况下,它都会彻底破坏Java及其相关解决方案的生产效率——而且我对Java有着超过十年的经验,我真的非常快。。。这说明了什么!如果rails不能做到这一点,那么我的脑海中就会闪现出一颗宝石,它是多么高效

然后是积极的关系。我非常努力地使用它作为我的主要查询方法,但这是不可能的。我发现,一旦我开始构建需要2个连接的查询,我就会收到奇怪的错误消息,这些消息毫无意义。。。老实说,所有的范围都很难解释

虽然这种方法可能会使事情更具可读性,但我认为从大局的角度来推理所发生的事情的成本。。。以及编写查询的成本。。。可能不会自己付钱。如果你真的擅长sql。。。或者像hql这样的语言。。。这种做法实际上是一种生产力损失。至少对我来说是这样

我可以接受它,但我无法使用嵌套联接。例如,如果我有ABC,B也是一个多对多关系的模型,ActiveRelation会抱怨其中一个外键的名称错误。。。尽管它实际上是正确的。我想这是一只虫子。所有使用作用域进行单连接的查询都能完美地工作。。。但是,如果您将这些非常相同的作用域合并为两个联接,则会失败。我看没有办法解决它

我可以只做其中一个连接,然后让ORM为我做其余的。。。但这将是对性能的极大浪费。对于一个大网站来说,这将以灾难告终。我正在编写一个庞大的系统,它存储了大量的关系数据树,每个请求存储数千个关系数据树。使用ORM遍历图形是一个性能杀手,我甚至懒得继续编写应用程序的其余部分。如果是这样的话,我可能不得不回到Java

除此之外,我在网上找不到任何多个连接的例子。即使是文档也很少提到连接和合并


所以。。。黄金时段准备好了吗?如何在Rails中实现真正复杂的7-9表连接?Rails不是为此而构建的吗?我之所以问这个问题,是因为如果Rails不能处理这种类型的查询,我将不得不停止使用它。。。相信我。。。这是一个巨大的,真正的耻辱。。。因为我绝对喜欢其他的一切。我真的希望我是错的,一切都好。

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

一旦您学会如何指导Rails,Rails实际上可以进行各种连接(根据我的经验,这确实是一个挑战)

我发现有时使用一点Ruby会使过程更简单。一张小小的地图也许可以拯救整个世界

然而,当您不能做某事时,并不是因为Rails不能处理它,而是因为您还不具备正确处理它的知识。Rails很难,有些事情看起来很不清楚,只是因为一开始你不了解它们


关于A,B,C的事情,它应该很好用。很可能(如果不确定的话)您在命名密钥时犯了错误(您可以100%确定这不是Rails错误:)

根据我的经验,我想说,除了ActiveRelation之外的一切都要简单得多。我从没想过Java真的很难,只是不必要的冗长和乏味。实际上,我想用看起来更像HQL的东西来替换查询机制。我会立刻变得有效率,在这一点上我绝对会感到高兴。我最近才知道如何进行2表联接,但不能重用作用域。我猜两次调用merge()或joins()会在同一个查询中导致问题。可能不是bug,但它应该支持具有多个连接条件的嵌套作用域:(我想我遇到了一个问题,直观的设计不是它是如何工作的。我的意思是,如果它适用于1个连接…你自然会认为它只适用于2个连接…但事实并非如此。要进行2+表连接,你实际上必须以不同的方式来处理它。这种API既笨重又令人困惑。至少在Hibernate中,它与1到70个连接。通常,您可以执行以下操作:joins=>[:model1,:model2],我认为这也可以在嵌套范围内工作(但您必须始终尝试一些特定的操作)请注意,有时调用作用域的顺序很重要。如果一个作用域直接影响另一个作用域,它必须在前面。很难说,如果你能给出一个具体的例子,当arel在7-9个表中失败时,也许你可以从其他人那里了解你做错了什么,我看不到任何技术障碍与are进行复杂连接l、 你只需要理解它背后的代码,打开arel Gem文件,在你不了解它的时候阅读源代码。它与你在java中使用的mysql是一样的,所以没有什么不同。关于你的a-b-c问题,当你设置查询时,最好在t的旁边定义你的密钥可编程名称,如
“b.外键”
这是一个很好的例子,说明了文档不太清楚的地方。API显然有多种方法来做同样的事情,文档和railscasts主张将这些范围链接在一起作为“最佳”实践……但事实证明,这不是您应该为连接做的,因为它不像您想象的那样工作。这里的示例: