RoR 3.1 - 使用where短语查询子时加载相关对象

时间:2011-09-29 20:31:22

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有以下结构

class List < ActiveRecord::Base
    has_many :global_lists
end

class GlobalList < ActiveRecord::Base
    set_table_name :globals_lists
    belongs_to :list
end

以及以下内容:

gl=GlobalList.find(1)   #works 
gl.list                 #works
gm=GlobalList.where(:global_id => 23).includes(:list) #works
gm.list                             # doesn't work

使用返回对象的位置时如何访问列表?

THX

编辑:有没有办法让我压扁这个并获得所有列表?我想我可以迭代但感觉可能有一些我不知道的语法

3 个答案:

答案 0 :(得分:2)

问题是GlobalList.find返回单个GlobalList对象,而where的查询返回ActiveRecord::Relation对象(表示整组对象)。你想要:

gm = GlobalList.where(:global_id => 23).includes(:list).first

答案 1 :(得分:1)

这一行:

gm = GlobalList.where(:global_id => 23).includes(:list)

返回一组模型。您需要先获得第一个才能获得列表。

gm.first.list

答案 2 :(得分:0)

GlobalList.find_by_global_id(23).list