问题标签 [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 投票
3 回答
273 浏览

ruby-on-rails - ActiveRecord 保持范围封装

我有两个模型,foo并且barfoo有很多bars

Bar是在给定时间段内发生的事件,所以我想要一个方法或范围,它返回一个ActiveRecord::Relation表示具有当前活动条的 foos 的方法或范围。

Foo这在具有范围的类中很容易:

我不喜欢的是,它foo需要非常了解bar.

这可以重写吗,可能通过在 上添加一个范围bar,所以foo不需要了解bar属性?

0 投票
1 回答
181 浏览

sql - 如何在 has_many 关系中急切加载最新的对象?

我有一个 Rails 3 应用程序,其中包含类别和帖子等模型。

类别

has_many :posts

邮政

属于_to:类别

我希望能够显示一个类别列表,其中列出了最近的帖子,而不需要循环访问每个类别的数据库,并且每个类别只拉回一个帖子。

我想做与这个问题相同的事情——SQL 连接:选择一对多关系中的最后一条记录——但希望使用 Active Record。

这是一件愚蠢的事情吗?我是否应该通过急切加载来撤回某个类别的所有帖子?我担心性能,这就是我开始研究这个的原因。

0 投票
7 回答
35010 浏览

ruby-on-rails - 如何在 Rails3 中对关联关系使用 unscoped?

由于信息安全限制,我对产品有默认范围。

然而,在我关联的照片模型中,我还必须找到不应该可见的产品。

在其他情况下,我可以使用unscoped来绕过 default_scope,例如在Product.unscoped.find_by_title('abc'). 然而:

使用记录关联时如何删除范围?

my_photo.unscoped.product没有意义,因为 my_photo 没有名为unscoped. 两者都没my_photo.product.unscoped有意义,因为my_photo.product可能已经为零。

0 投票
1 回答
16794 浏览

ruby-on-rails-3 - 如何找到最高价格的记录?

这将返回最大值而不是完整的记录:

目前,我发现这样的记录:

这是正确的方法吗?因为上面需要两条SQL语句才能让它工作,总感觉有点不对劲。

附言。此外,我希望如果多条记录具有相同的“最大值”值,那么它应该获得具有最新updated_at值的记录。那么这将意味着另一个SQL语句?

pps。有谁知道Rails 中 AREL 和非 AREL 事物的良好详细参考?ActiveRecord 查询的 Rails 指南还不够!

(我正在使用 Rails 3)

===更新===

使用 AREL 我执行以下操作:

但这只是给出最大值而不是完整的记录:(
另外,maximum()真的使用 AREL 吗?

0 投票
3 回答
16154 浏览

ruby-on-rails-3 - 在关联上使用范围

所以我有一个疯狂的想法,我想将一个范围应用于包含的关联。这就是我想出来的,它似乎工作得很好:

问题是它真的很钝。为了在 Race 上定义范围(在其他地方使用)并在 Event 的关联中使用它,我必须在 Race 上有两种方法。对于每个范围。

我确信我可以将模式包装到插件或类似的东西中,但如果可能的话,我更愿意使用原生 AR/ARel。有什么想法吗?

0 投票
2 回答
987 浏览

ruby-on-rails-3 - 模型中未作用域的 rails3 被 default_scope 覆盖

我有这个模型

用户.rb

我仍然得到一个 to_sql ,其中包括ORDER BY users.created_at DESC, users.ranking DESC...

有人可以解释为什么吗?

我真的不想从我将使用此模型的每个控制器中调用 unscoped 。

谢谢!

0 投票
3 回答
2088 浏览

ruby-on-rails - rails 活动记录选择

Q:一个查询中选择所有帖子和相关评论,将评论关系加载到p.comments中,但从评论中只选择标题

邮政

评论

我需要什么:在一个查询中选择所有帖子和相关评论并将评论关系加载到 p.comments 中,但仅从评论中选择标题:

如果第一部分由 .includes 完成:

=> 选择postsid作为 t0_r0, posts. title作为 t0_r1, posts. text作为 t0_r2, posts. created_at作为 t0_r3, posts. updated_at作为 t0_r4, comments. id作为 t1_r0, comments. title作为 t1_r1 comments,。text作为 t1_r2 comments,。post_id作为 t1_r3, commentscreated_at作为 t1_r4, commentsupdated_atAS t1_r5 从左外posts连接comments打开commentspost_id= postsid

它完全忽略了选择。

好的,让我们尝试加入:

=> SELECT posts.*, comments.title FROM postsINNER JOIN commentsON commentspost_id= postsid

更好,但我们需要表别名——Rails 不处理关系(为什么?)

=> SELECT posts.*, comments.title as comments_title FROM postsINNER JOIN commentsON commentspost_id= postsid

好的,让我们试试 ARel

=> 选择postsid, posts. title, comments. id, comments. titleposts内部连接comments开始commentspost_id= postsid

同样的故事——ActiveRecord 不处理关系。

有什么建议么?

UPD

  1. 如果这个问题没有直接的解决方案,也许有一种方法可以使用一些 AR 方法来转换结果查询。因为,AR 使用 ARel,然后在其上调用 find_by_sql,然后做一些魔术,我无法找到它的执行时间和执行时间,以及中提琴:生成别名和加载关联。

  2. 也许有一对一关系的解决方案?

    帖子 = Post.select('posts.id,posts.title,comments.id,comments.title').includes(:comment) posts.first.comment.loaded? #真的

=> 选择postsid作为 t0_r0, posts. title作为 t0_r1, posts. text作为 t0_r2, posts. created_at作为 t0_r3, posts. updated_at作为 t0_r4, comments. id作为 t1_r0, comments. title作为 t1_r1 comments,。text作为 t1_r2 comments,。post_id作为 t1_r3, commentscreated_at作为 t1_r4, commentsupdated_atAS t1_r5 从左外posts连接comments打开commentspost_id= postsid

0 投票
3 回答
900 浏览

ruby-on-rails-3 - Rails 3 HABTM - 访问交叉口实体

我试图在 Rails 3 has-and-belongs-to-many 关联(HABTM)中近似多态关系。

交集表(user_favorites)有这些字段:user_id, favorite_id, favorite_class

在 User 类中,我定义了关系:

对于检索数据,这按预期工作。不幸的是,这个定义不会添加我需要的 favourite_class' 值(在这种情况下是'User')。

有没有办法,也许使用 Arel,在保存记录之前将 favorite_class 字段设置为所需的值?

0 投票
1 回答
1125 浏览

ruby-on-rails - Rails 3 中的数据库查询

您如何使用 ARel
1 在 Rails 3 中编写这些查询。

2.

我无法弄清楚如何编写查询的!=NOT IN部分。

0 投票
1 回答
440 浏览

ruby-on-rails - 尝试订购时,ActiveRecord/Arel 查询解析为奇怪的东西

我正在尝试从 MySQL 过渡到似乎更严格且对 Rails 不太友好的 PostgreSQL。

我遇到了这个有趣的难题:

但...

尽管事实上只是添加ORDER BY vendors.id就可以作为有效的 PostgreSQL 查询。它不仅添加了它,还做了一些非常有趣的事情,并在一天结束时产生了一个无效的查询:

任何线索我应该看什么?