问题标签 [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.

0 投票
1 回答
3937 浏览

ruby-on-rails - Rails 3 相当于复杂的 SQL 查询

给定以下模型:

如何在 Rails 3 中使用 Arel 执行以下 SQL 查询?

0 投票
6 回答
11886 浏览

distinct - 如何使用 arel/关系代数获取不同的值

我正在尽我最大的努力围绕 arel 和它背后的关系代数弯曲我的大脑,但是如何表示 aSELECT DISTINCT一直是我无法理解的。谁能解释一下如何做:

非常感谢!

0 投票
2 回答
1340 浏览

ruby-on-rails - 通过 Rails 3 中的行为模拟 has_and_belongs_to_many

所以 Rails 不支持 :through 关联通过 habtm 关系。有一些插件可以为 Rails 2.x 添加这个,但我使用的是 Rails 3 / Edge,只需要一个特定模型的关联。所以我想我会用 Arel 的美貌自己把它难倒。

一、机型:

我想获得属于特定卡片组的所有知识,:through => 卡片。

这是我目前在 CardSet 模型中的内容:

这给了我(该死,Arel 很漂亮!):

这与我的目标非常接近 - 只需cards在语句的 FROM 部分中添加表格即可。

还有我的问题:我已经查看了 Arel 源代码,而对于我的生活,我无法弄清楚如何在另一个表中添加。

作为旁注,有没有更好的方法通过 ActiveRecord 从 Arel 运行结果(它通常返回一个我不想要的 Arel::Relation),而不是渲染到 sql 并像我一样使用 find_by_sql 运行查询正在做?

0 投票
0 回答
1167 浏览

activerecord - 奇怪的 Rails 3 范围行为

我在 rails 3 应用程序中实现了以下范围:

但是,似乎当您尝试直接计算其记录时,它不会应用范围过滤器。

例如:

检查日志,它执行以下查询:

现在如果我执行

并执行正确的查询:

其他人经历过这种行为吗?如果是这样,知道这是预期的行为还是我面临错误?

最好的问候, DBA

0 投票
1 回答
7211 浏览

ruby-on-rails - 问题:activerecord(rails3),包含包含的链接范围

在 Rails3 中,链接两个范围(ActiveRelations)时似乎存在问题,每个范围都有不同的包括:

考虑这两个范围,它们都可以自己正常工作:

第一范围:

Work.global_only(user) => (为了便于阅读,从 SQL 中截取字段列表)

现在是第二个范围:

Work.not_belonging_to(user) =>(为了便于阅读,从 SQL 中截取字段列表)

因此,这两个都可以单独正常工作。

现在,将它们链接在一起:

Work.global_only(user).not_belonging_to(user)

SQL:

如您所见,来自第二个作用域的连接完全被忽略了。因此,SQL 在“没有这样的列“participants.user_id”上失败。如果我以相反的顺序链接范围,则将出现“参与者”加入,而“国家”加入将丢失。似乎总是第二次加入丢失。

这看起来像 ActiveRecord 的错误,还是我做错了什么,或者这是一个“功能”:-)

(PS。是的,我知道,我可以创建一个连接两个表的范围,它会正确产生我想要的结果。我已经有了。但我试图制作更小的范围,而不是可以以不同的方式链接在一起,这应该是activerecord优于直接sql的优势。)

0 投票
3 回答
7023 浏览

ruby-on-rails - 如何从模型在 Rails 3 中执行复杂的 Arel 查询

我在 Rails 3 上,我有一个 SQL 查询,由我在 Arel 中建立的几个连接组成。我想从我的一个模型中的方法运行此查询,但我不确定如何执行此操作。arel 对象原来是 Arel::InnerJoin 类型,我想检索从该查询返回的所有对象的数组。我是否运行 ModelName.find_by_sql(my_arel_query_object) 来做到这一点?还是我运行 my_arel_query_object.each {...} 并遍历每个元组以手动将它们弹出到数组中?

我希望我清楚自己。任何见解将不胜感激。谢谢。

更新:这是我在用户模型中使用的代码:

我在这里要做的是获取用户拥有的每家餐厅提供的所有餐点中使用的所有成分。成分_for_user 变量代表我希望运行的 Arel 查询。我只是不确定如何运行和返回所有成分,而 Ingredient.find_by_sql... 似乎不正确。

结尾

0 投票
2 回答
2925 浏览

ruby-on-rails - Rails3 和 Arel 使用 IN 和 subselect 进行选择

我有一张叫做翻译的表。(以及相应的 ActiveRecord 类)。此表包含以下字段 id、key 和 value

我想选择键与给定查询匹配的所有翻译+所有与查询不匹配的翻译,但与匹配查询的翻译共享键。

生成的 SQL 可能如下所示:

我已经尝试了几件事,但我似乎无法弄清楚。关于如何在 Arel 中表达这一点的任何想法?

0 投票
2 回答
1495 浏览

ruby-on-rails-3 - 用arel中的联合重写复杂的查询?

我有以下型号

然后我有以下查询:

简而言之:我正在寻找所有覆盖给定国家代码或覆盖空国家代码的快递公司(后备)。

查询有效,但我想知道是否有更好的方法来编写它?

0 投票
4 回答
10911 浏览

ruby-on-rails - Rails Arel 选择不同的列

我用新scope方法遇到了一点问题(Arel 0.4.0,Rails 3.0.0.rc)

基本上我有:

一个topics模型, whichhas_many :comments和一个comments模型(带有一topic_id列) which belongs_to :topics

我正在尝试获取“热门话题”的集合,即最近评论的话题。当前代码如下:

如果我执行Topic.hot.to_sql,将触发以下查询:

这很好用,但它可能会返回重复的主题 - 如果主题 #3 最近被多次评论,它将被多次返回。

我的问题

我将如何返回一组不同的主题,记住我仍然需要访问该comments.created_at字段,以显示上一篇文章是多久以前的?我会想象一些类似于distinctor的东西group_by,但我不太确定如何最好地去做。

任何建议/建议都非常感谢 - 我已经添加了 100 个代表的赏金,希望很快能找到一个优雅的解决方案。

0 投票
1 回答
2666 浏览

ruby-on-rails - 在 Rails 3 上使用计算进行分组查询

Rails 3 问题。我有一个具有以下属性的食物表:

  • 姓名
  • 卡路里(每克)
  • 脂肪(每克)
  • 碳水化合物(每克)
  • 蛋白质(每克)

然后我有一个 LoggedFoods 表,表示在给定时间吃过的食物。它具有以下属性:

  • food_id
  • number_of_grams_eaten
  • ate_when(日期时间)

所以我遇到的问题是我想在一个查询中获得每天(全天)消耗的卡路里、脂肪、蛋白质、碳水化合物的总数。我一直在尝试使用新的 ActiveRecord 查询界面来执行此 Rails 3,但没有运气。有任何想法吗?