我视图中的此代码会触发错误:
<% 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对象?
答案 0 :(得分:3)
f.error_messages
的实现在ActiveRecordHelper中,因为它取决于ActiveRecord::Errors
的特定格式(ActiveRecord::Base
子类存储在mymodel.errors
上)。
如果删除error_messages,它应该可以正常工作。或者,您可以创建自己的类,其具有与ActiveRecord :: Errors相同的接口,并在这种情况下替换鸭子类型样式。