问题标签 [arel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 多个“有”子句炸毁了 Rails 3 / Arel
我想我在 Rails 3 / Arel 中发现了一个错误,但我希望有人能在我尝试修复它和/或提交错误报告之前澄清我的问题。
- 在一个非常简单的应用程序上,带有一个 Question 模型:(submitter_id: integer, option_count: integer)
我正在使用的代码:
这爆炸了:
取出其中一个“有”子句可以解决问题,并生成正确的 SQL。
任何意见将不胜感激。Arel 和 Rails 3 是边缘版本,上面的错误中列出了修订版。
ruby-on-rails - 如果凌乱的控制器更快,为什么 Rails 范围更受欢迎?
我一直在尝试使用范围链接 Arel 查询,而不仅仅是使用我在控制器中编写的一些冗长的逻辑。但是范围比获取所有记录然后用一些逻辑筛选它们要慢。那么,我想知道为什么范围更好。
这就是我正在做的事情:
- 一个问题有很多答案
- 一个答案属于一个问题
- 一个问题有一个“question_type”列,我用它来对其进行排序
首先,范围方式...
有问题.rb:
在 questions_controller.rb 中:
然后在视图中,我循环遍历这些实例变量(现在是最多包含 10 个元素的数组)并显示结果。
以下是加载页面所需的时间(五次不同):
在 535 毫秒内完成 200 次 OK(查看次数:189.6 毫秒 | ActiveRecord:46.2 毫秒)
在 573 毫秒内完成 200 次 OK(查看次数:186.0 毫秒 | ActiveRecord:46.3 毫秒)
在 577 毫秒内完成 200 次 OK(查看次数:189.0 毫秒 | ActiveRecord:45.6 毫秒)
在 532 毫秒内完成 200 次 OK(查看次数:182.9 毫秒 | ActiveRecord:46.1 毫秒)
在 577 毫秒内完成 200 次 OK(查看次数:186.7 毫秒 | ActiveRecord:46.9 毫秒)
现在,凌乱的控制器方式......
以下是现在加载页面所需的时间(五次不同):
在 475 毫秒内完成 200 次 OK(查看次数:196.5 毫秒 | ActiveRecord:34.5 毫秒)
在 480 毫秒内完成 200 次 OK(查看次数:200.4 毫秒 | ActiveRecord:36.4 毫秒)
在 434 毫秒内完成 200 次 OK(查看次数:198.2 毫秒 | ActiveRecord:35.8 毫秒)
在 475 毫秒内完成 200 次 OK(查看次数:194.2 毫秒 | ActiveRecord:36.4 毫秒)
在 475 毫秒内完成 200 次 OK(查看次数:195.0 毫秒 | ActiveRecord:35.4 毫秒)
所以...
除了可读性之外,通过范围磨练查询还能获得什么?当有更多记录时,它最终会变得更快吗?
ruby-on-rails - 模型中的虚拟列
是否可以向模型添加虚拟列(不是虚拟属性!)?
我有以下情况:AProduct(id, name)
有很多ProductVariant(id, price, offer_price, product_id,...)
当我选择所有产品时,我希望从ProductVariants
产品结果中的所有产品中获得最低产品价格。
我在 sql 查询 () 中计算最低价格,with_min_price
并希望将此min_price
值添加到Product
我的@products result
.
ruby-on-rails - 建立连接似乎不支持连接
我正在尝试将我的用户帐户和会话数据移动到一个单独的数据库中,以便我们最终可以在多个应用程序之间共享它。
我在网上看到很多人说用来establish_connection
告诉模型连接到不同的数据库,但我无法让它工作。
配置/数据库.yml
应用程序/模型/user.rb
应用程序/模型/person.rb
这似乎很有效:
我可以单独查询User
:
但是一旦我尝试使用join
它就会中断:
ARel 似乎正在使用当前数据库,而不是通过反射获得正确的数据库。
我发现了差不多两年前关于这个问题的这个非常古老的错误报告,但我几乎可以肯定它是关于旧的 ARel 语法的,我真的怀疑代码示例是否会继续工作。
这甚至可能吗?
更新:通过这样做取得了一点进展:
但这真的很乏味,我想加入的表之一是多态的。
我尝试添加:
但这又回来了
在我看来,Rails3 实际上并不支持多个模式。我错了吗?
ruby-on-rails - 有没有一种特别优雅的方式来使用 Rails 3 / Arel 进行计数查询?
这是一个 Rails2 查询:
查询很难看,但生成的 SQL 是理想的。
在 Rails 3 / Arel 中有更优雅的方法吗?
编辑
这更漂亮,但仍然没有 Arel 魔法:
ruby-on-rails - 如何在 Arel 和 Rails 中进行 LIKE 查询?
我想做类似的事情:
我在 Arel 的尝试:
然而,这变成:
Arel 正确包装了查询字符串“Smith”,但因为这是一个 LIKE 语句,所以它不起作用。
如何在 Arel 中进行 LIKE 查询?
PS Bonus--我实际上是在尝试扫描表上的两个字段,包括名称和描述,以查看查询是否匹配。那将如何运作?
ruby-on-rails - 你如何做一个逻辑或使用两个 ActiveRelation 结果返回另一个关系
鉴于我有以下代码
如果我想将产品制造并分发到德国,我可以执行以下操作
在上述情况下,如果我愿意,我可以在将其分配给产品之前链接更多的关系方法。
如果我想访问所有涉及德国的产品,我可以执行以下操作
在这里,我无法在将更多关系方法分配给产品之前将其链接起来,因为 OR 的结果Array
不是ActiveRecord
::Relation。
我的问题是我如何 OR for_country 与 from_country 并得到ActiveRecord::Relation
一个结果?
理想情况下,如下所示Product.for_country(country).or(Product.from_country(country))
sql - Rails 3:是否有`AR#or_where`?
AR#or_where
Rails 3 中是否有一个
?
sql - 子查询可以为 NULL 时的 SQL“IN 子查询”
我有一个查询需要返回子查询中不匹配的结果。子查询可以返回一个空结果,所以如果子查询返回一个空集,我需要设置一个默认值(比如 0),以防止IN (NULL)
它总是返回另一个 NULL。
例如
subquery_that_selects_ids
如果子查询没有找到匹配的结果,则可以返回一组整数,即 (1,2,5,6) 或空集。
COALESCE
在这里不起作用,因为子查询可能会返回多个结果。
解决方案需要在 SQLite 或 postgresql 中运行。如何防止子查询返回空集?
每个人都告诉我查询应该按书面方式工作。你们都是对的。该查询是由 Rails3 的 AREL 构建的,当我准备在这里发布完整的查询时,我注意到 AREL 在使用数组条件时将 NULL 放入空集。
IE 我在 rails 中的查询看起来像:
当Object.where(other_conditions)
评估为[]
被?
替换为NULL
所以我重新编写查询看起来像:
问题解决了。
我赞扬@Michael Buen,但也赞成任何告诉我查询会按书面形式工作的人,因为它们是正确的。特别感谢@OMG Ponies 和@Ted Elliott!