为什么form_helper假设它应该调用active_record_helper?

时间:2009-06-20 19:12:03

标签: ruby-on-rails ruby activerecord

我视图中的此代码会触发错误:

<% remote_form_for(mymodel) do |f| %>
  <%= f.error_messages %>

(mymodel不是ActiveRecord对象)

当我查看错误跟踪时,我看到此部分指示视图中的error_messages转换为error_messages_for中的active_record_helper

C:/Ruby18/lib/ruby/gems/1.8/gems/
actionpack-2.3.2/lib/action_view/
helpers/active_record_helper.rb:179:in `error_messages_for'

C:/Ruby18/lib/ruby/gems/1.8/gems/
actionpack-2.3.2/lib/action_view/
helpers/form_helper.rb:984:in `error_messages'

为什么form_helper认为它应该调用active_record_helper,即使'mymodel'不是ActiveRecord对象?

1 个答案:

答案 0 :(得分:3)

f.error_messages的实现在ActiveRecordHelper中,因为它取决于ActiveRecord::Errors的特定格式(ActiveRecord::Base子类存储在mymodel.errors上)。

如果删除error_messages,它应该可以正常工作。或者,您可以创建自己的类,其具有与ActiveRecord :: Errors相同的接口,并在这种情况下替换鸭子类型样式。