问题标签 [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.
ruby-on-rails - ActiveRecord 保持范围封装
我有两个模型,foo
并且bar
,foo
有很多bars
。
Bar
是在给定时间段内发生的事件,所以我想要一个方法或范围,它返回一个ActiveRecord::Relation
表示具有当前活动条的 foos 的方法或范围。
Foo
这在具有范围的类中很容易:
我不喜欢的是,它foo
需要非常了解bar
.
这可以重写吗,可能通过在 上添加一个范围bar
,所以foo
不需要了解bar
属性?
sql - 如何在 has_many 关系中急切加载最新的对象?
我有一个 Rails 3 应用程序,其中包含类别和帖子等模型。
类别
has_many :posts
邮政
属于_to:类别
我希望能够显示一个类别列表,其中列出了最近的帖子,而不需要循环访问每个类别的数据库,并且每个类别只拉回一个帖子。
我想做与这个问题相同的事情——SQL 连接:选择一对多关系中的最后一条记录——但希望使用 Active Record。
这是一件愚蠢的事情吗?我是否应该通过急切加载来撤回某个类别的所有帖子?我担心性能,这就是我开始研究这个的原因。
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
可能已经为零。
ruby-on-rails-3 - 如何找到最高价格的记录?
这将返回最大值,而不是完整的记录:
目前,我发现这样的记录:
这是正确的方法吗?因为上面需要两条SQL语句才能让它工作,总感觉有点不对劲。
附言。此外,我希望如果多条记录具有相同的“最大值”值,那么它应该获得具有最新updated_at
值的记录。那么这将意味着另一个SQL语句?
pps。有谁知道Rails 中 AREL 和非 AREL 事物的良好或详细参考?ActiveRecord 查询的 Rails 指南还不够!
(我正在使用 Rails 3)
===更新===
使用 AREL 我执行以下操作:
但这只是给出最大值,而不是完整的记录:(
另外,maximum()
真的使用 AREL 吗?
ruby-on-rails-3 - 在关联上使用范围
所以我有一个疯狂的想法,我想将一个范围应用于包含的关联。这就是我想出来的,它似乎工作得很好:
问题是它真的很钝。为了在 Race 上定义范围(在其他地方使用)并在 Event 的关联中使用它,我必须在 Race 上有两种方法。对于每个范围。
我确信我可以将模式包装到插件或类似的东西中,但如果可能的话,我更愿意使用原生 AR/ARel。有什么想法吗?
ruby-on-rails-3 - 模型中未作用域的 rails3 被 default_scope 覆盖
我有这个模型
用户.rb
和
我仍然得到一个 to_sql ,其中包括ORDER BY users.created_at DESC, users.ranking DESC
...
有人可以解释为什么吗?
我真的不想从我将使用此模型的每个控制器中调用 unscoped 。
谢谢!
ruby-on-rails - rails 活动记录选择
Q:一个查询中选择所有帖子和相关评论,将评论关系加载到p.comments中,但从评论中只选择标题
邮政
评论
我需要什么:在一个查询中选择所有帖子和相关评论并将评论关系加载到 p.comments 中,但仅从评论中选择标题:
如果第一部分由 .includes 完成:
=> 选择posts
。id
作为 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, comments
。created_at
作为 t1_r4, comments
。updated_at
AS t1_r5 从左外posts
连接comments
打开comments
。post_id
= posts
。id
它完全忽略了选择。
好的,让我们尝试加入:
=> SELECT posts.*, comments.title FROM posts
INNER JOIN comments
ON comments
。post_id
= posts
。id
更好,但我们需要表别名——Rails 不处理关系(为什么?)
=> SELECT posts.*, comments.title as comments_title FROM posts
INNER JOIN comments
ON comments
。post_id
= posts
。id
好的,让我们试试 ARel
=> 选择posts
。id
, posts
. title
, comments
. id
, comments
. title
从posts
内部连接comments
开始comments
。post_id
= posts
。id
同样的故事——ActiveRecord 不处理关系。
有什么建议么?
UPD
如果这个问题没有直接的解决方案,也许有一种方法可以使用一些 AR 方法来转换结果查询。因为,AR 使用 ARel,然后在其上调用 find_by_sql,然后做一些魔术,我无法找到它的执行时间和执行时间,以及中提琴:生成别名和加载关联。
也许有一对一关系的解决方案?
帖子 = Post.select('posts.id,posts.title,comments.id,comments.title').includes(:comment) posts.first.comment.loaded? #真的
=> 选择posts
。id
作为 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, comments
。created_at
作为 t1_r4, comments
。updated_at
AS t1_r5 从左外posts
连接comments
打开comments
。post_id
= posts
。id
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 字段设置为所需的值?
ruby-on-rails - Rails 3 中的数据库查询
您如何使用 ARel
1 在 Rails 3 中编写这些查询。
2.
我无法弄清楚如何编写查询的!=和NOT IN部分。
ruby-on-rails - 尝试订购时,ActiveRecord/Arel 查询解析为奇怪的东西
我正在尝试从 MySQL 过渡到似乎更严格且对 Rails 不太友好的 PostgreSQL。
我遇到了这个有趣的难题:
但...
尽管事实上只是添加ORDER BY vendors.id
就可以作为有效的 PostgreSQL 查询。它不仅添加了它,还做了一些非常有趣的事情,并在一天结束时产生了一个无效的查询:
任何线索我应该看什么?