使用.where(eager fetching)时的NoMethodError

时间:2012-10-31 22:58:16

标签: ruby-on-rails ruby model

我有以下模型类......

class Image < ActiveRecord::Base
  attr_accessible :description, :title
  has_many :imageTags
  has_many :tags, :through => :imageTags
end

class Tag < ActiveRecord::Base
  attr_accessible :name
  has_many :imageTags
  has_many :images, :through => :imageTags
end

class ImageTag < ActiveRecord::Base
  attr_accessible :position
  belongs_to :image
  belongs_to :tag
end

当我使用find获取ID为1的标签时

t = Tag.find(1);
@images = t.images;

但是当我对where执行相同操作时,我会得到一个NoMethodError,其中包含undefined method 'images'的描述:

t = Tag.where(:name => "foo");
@images = t.images;

我还尝试在.includes(:images)语句之前添加.where,但这也不起作用。 那么,我怎样才能获得属于Images的所有Tag

1 个答案:

答案 0 :(得分:3)

.where返回一个ActiveRecord :: Relation实例,而不是单个对象。抓住.first抓住(大概)唯一记录的回复:

t = Tag.where(name: "foo").first
@images = t.images