0

您如何使以下工作...

Beagle.beagles.where(:snount => "short")

...在为snout定义了方法 idBeagle但表中没有snout列的情况beagles下?

4

2 回答 2

2

如果您需要一个范围(即ActiveRecord::Relation对象),那么我认为您不走运,因为where处理的是数据库查询逻辑,而不是模型实例方法。但是,如果您只需要获得满足方法要求的结果数组,那么这将起作用:

Beagle.select { |b| b.snout == "short" }

请注意,这将从数据库中获取所有记录,然后从中选择您想要的记录。这是生成的 SQL:

Beagle Load (0.1ms)  SELECT "beagles".* FROM "beagles" 

另请参阅:范围内的实例方法

于 2012-12-10T09:34:50.213 回答
1

也许试试这个

beagles = Beagle.find(:all)
beagles.each do |beagle|
if beagle.snount == "short"
beagles_selected << beagle
end
end

然后,您将拥有一个beagles_selected包含您需要的所有小猎犬的数组

于 2012-12-10T09:31:36.993 回答