Ruby on rails 3 未定义的方法';在';用于ActionModel

Ruby on rails 3 未定义的方法';在';用于ActionModel,ruby-on-rails-3,activerecord,ruby-1.9,Ruby On Rails 3,Activerecord,Ruby 1.9,我得到以下错误: NoMethodError in Users#new Showing .../app/views/users/form/_new.haml where line #7 raised: undefined method `on' for #<ActiveModel::Errors:0x007fb599ec6610> 以及应用程序_helper.rb: def errors_for(model, field) error = case errors = mod

我得到以下错误:

NoMethodError in Users#new

Showing .../app/views/users/form/_new.haml where line #7 raised:

undefined method `on' for #<ActiveModel::Errors:0x007fb599ec6610>
以及应用程序_helper.rb:

def errors_for(model, field)
  error = case errors = model.errors.on(field)
  ...
end

“on”是一个词。为什么不起作用?

我检查了我的用户,发现
u.errors
是一个
ActiveRecord::errors
,当我看到你有一个
ActiveModel::Error
时,我会处理这个问题


然后我不理解助手中的
case errors=
语句,我很想知道您是如何实现这一部分的…

如果您使用的是Rails 3,那么问题是errors类不再有“on”方法。我想你现在应该用“get”了。因此:

error = case errors = model.errors.get(field)
或者


我也在想这件事。但是当我在rails控制台中运行User.new时,一切正常。代码来自Teambox(),试图在本地运行它。case语句现在更有意义了(尽管我认为如果在同一个字段上有两个错误,那么第二个错误就会丢失?)。嗯,我只是想让代码运行,我没有编写它。;)我删除了整个语句,但它仍然返回相同的错误。不知道那里怎么了。特别是它检查的是模型,而不是ActiveRecords。我试图安装repo,但我在gem版本上遇到了一些问题,所以我放弃了,你让它直接运行了吗?是的,我花了相当长的时间来获得所有正确的gem版本。这是我的叉子:基本上“on”曾经是[]的别名,他们把它改为“get”。我只需要使用[](在Rails 2和Rails 3中都可以使用)。
error = case errors = model.errors.get(field)
error = case errors = model.errors[field]