0

我正在使用:

rails 2.3.9 ruby 1.9.3 windows 7 ultimate rubygems 1.8.24

这有效:

@inventories = Inventory.find :first, :conditions => {:siteId => params[:siteId]}

这不

@inventories = Inventory.find :all, :conditions => {:siteId => params[:siteId]}

错误信息:

NoMethodError (undefined method `siteId' for #Array:0x49738f8)
4

2 回答 2

1

对于 rails 2.x,您的语法略有错误如果您想查找具有特定条件的所有记录,请尝试使用多个条件的示例

@inventories = Inventory.find(:all, :conditions => ["siteId=? and priority=?", params[:siteId], 3])
于 2012-09-06T07:53:10.917 回答
0

当你写

@inventories = Inventory.find :first, :conditions => {:siteId => params[:siteId]}

上一行Inventory根据与给定条件匹配的默认顺序为您提供了一个(第一个)对象,因此您可以使用@inventories.siteId. 但是,当没有行与给定条件匹配时,它将返回 nil,在这种情况下,如果您尝试使用 @inventories.siteId它将undefined method为 nil 抛出错误 siteId'

但是当你写

@inventories = Inventory.find :all, :conditions => {:siteId => params[:siteId]}

Inventory如果您的查询返回 1 个或超过 1 个对象,即行和空白数组,即[]如果现在行满足条件,则上面的行为您提供了一个无关紧要的对象数组。因此,当您尝试使用 时@inventories.siteId,您实际上是在 Array 上而不是在对象上应用 siteId,Inventory它会为 #Array` 引发错误undefined methodsiteId'。但是以下将正常工作

@inventories.each{|p| puts "#{p.siteId}"}
于 2012-09-06T08:17:21.343 回答