gpt4 book ai didi

sql - ActiveRecord::Relation join,如何将连接表的一列添加到新名称的查询结果中?

转载 作者:行者123 更新时间:2023-12-01 00:00:02 26 4
gpt4 key购买 nike

为了设置舞台,我使用了 rails 3,我有这些表和关系:

user has_many lists
list has_many tasks
task has_many stints

我想构建一个查询,允许我选择所有当前用户的 stint,并将 list.id 用作结果中每个 stint 的属性。我需要将 list.id 重命名为 list_id ,否则它会覆盖结果中 stint 的 id 属性。我认为“as”会起作用,但它不会。

这给了我属于用户 1 的最后一个阶段:
Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id =>  1 }).last
=> #<Stint id: 753, task_id: 245>

然而,我想要的是:
 => #<Stint id: 753, task_id: 245, list_id: 2>

所以我想这会奏效:
Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id =>  1 }).select('stints.*, lists.id as list_id').last
=> #<Stint id: 753, task_id: 245>

如您所见,没有区别。但是如果我不使用“as”,我会得到这个:
Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id =>  1 }).select('stints.*, lists.id').last
=> #<Stint id: 2, task_id: 245>

使用了 list.id,但由于该属性设置为名称“id”,因此它隐藏了 stint.id。

任何帮助,将不胜感激。

编辑 - SQL 很好。查询返回正确的列和值,包括 list_id。
问题是它不会在模型上创建属性。

最佳答案

这个属性一直存在。它只是没有显示在结果中。

s = Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id =>  1 }).select('stints.*, lists.id as list_id').last
=> #<Stint id: 753, task_id: 245>

s.attributes
=> {"id"=>753, "list_id"=>"2", "task_id"=>245}

s.list_id
=> "2"

关于sql - ActiveRecord::Relation join,如何将连接表的一列添加到新名称的查询结果中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3344892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com