我的问题是:为什么不.becomes
将错误传递给新对象?这不是预期的行为吗?
我在 Rails 应用程序中有以下单表继承类:
class Document < ActiveRecord::Base
validates :title, :presence => true
end
class LegalDocument < Document
end
class MarketingDocument < Document
end
我想使用相同的控制器和一组视图来编辑LegalDocument
s 和MarketingDocument
s,所以我使用DocumentsController < ApplicationController
以下edit
和update
操作:
def edit
@document = Document.find(params[:id])
end
def update
@document = Document.find(params[:id])
if @document.update_attributes(params[:document])
redirect_to documents_path, :notice => "#{t(:Document)} was successfully updated."
else
render :action => "edit"
end
end
在我edit
看来,以下几点:
<%= form_for @document.becomes(Document) do |f| %>
<% if f.object.errors.present? %>
<div class="error_message">
<h4><%= pluralize(f.object.errors.count, 'error') %> occurred</h4>
</div>
<% end %>
<div>
<%= f.label :title %>
<%= f.text_field :title, :class => "inputText" %>
</div>
<%= f.submit %>
<% end %>
- 如果填写了标题,则文档会正确更新。
- 如果标题留空,我将返回编辑视图,但未显示错误。
从调试中,我知道它没有显示,因为它f.object.errors
是 nil。 但是,从调试中,我也知道@document.errors
不是 nil,正如预期的那样。
我的问题是:为什么不.becomes
将错误传递给新对象?这不是预期的行为吗?