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

Jul*_*ann 4 sql activerecord join ruby-on-rails-3

要设置阶段,我使用rails 3,我有这些表和关系:

user has_many lists
list has_many tasks
task has_many stints
Run Code Online (Sandbox Code Playgroud)

我想构建一个查询,允许我选择所有当前用户stints,并使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> 
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

 => #<Stint id: 753, task_id: 245, list_id: 2>
Run Code Online (Sandbox Code Playgroud)

所以我认为这样可行:

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

如你所见,没有区别.但如果我不使用"as",我会得到:

Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id =>  1 }).select('stints.*, lists.id').last
=> #<Stint id: 2, task_id: 245> 
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激.

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

Jul*_*ann 5

呃 - 解决了.这个属性一直存在.它只是没有显示在结果中.我觉得多么愚蠢

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" 
Run Code Online (Sandbox Code Playgroud)