我正在使用:
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)
答案 0 :(得分:1)
对于rails 2.x,您的语法略有错误 如果要查找具有特定条件的所有记录,请尝试使用多个条件的此示例
@inventories = Inventory.find(:all, :conditions => ["siteId=? and priority=?", params[:siteId], 3])
答案 1 :(得分:0)
当你写
@inventories = Inventory.find :first, :conditions => {:siteId => params[:siteId]}
上面的行为Inventory
提供了一个(第一个)对象,具体取决于与给定条件匹配的默认顺序,因此您可以使用@inventories.siteId
。但是,当没有行符合给定条件时,它将返回nil,在这种情况下,如果您尝试使用@inventories.siteId
,则会为nil抛出错误undefined method
siteId'
但是当你写作
@inventories = Inventory.find :all, :conditions => {:siteId => params[:siteId]}
上面的行给出了Inventory
对象的数组,如果您的查询返回1个或多个对象,即行和空白数组,即[]
,如果现在的行满足条件,则无关紧要。因此,当您尝试使用@inventories.siteId
时,实际上是在Array上应用siteId而不是Inventory
的对象,它会为#Array`抛出错误undefined method
siteId'。但是,以下将正常工作
@inventories.each{|p| puts "#{p.siteId}"}