问题标签 [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_atAS t1_r5 从左外posts连接comments打开comments。post_id= posts。id
它完全忽略了选择。
好的,让我们尝试加入:
=> SELECT posts.*, comments.title FROM postsINNER JOIN commentsON comments。post_id= posts。id
更好,但我们需要表别名——Rails 不处理关系(为什么?)
=> SELECT posts.*, comments.title as comments_title FROM postsINNER JOIN commentsON 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_atAS 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 查询。它不仅添加了它,还做了一些非常有趣的事情,并在一天结束时产生了一个无效的查询:
任何线索我应该看什么?