对于使用无效数据提交的 Rails 表单显示错误消息并使用无效数据重新填充表单似乎是正常功能。至少,我所有的 Active Record 托管资源都是这样工作的。
但是,我有一个不是 Active Record 的虚拟资源/模型,而是使用Railscast #219中的 Rails 3 ActiveModel 。
除了提交失败之外,一切都按我的预期工作。重新渲染的表单是空的。错误消息正常显示。
Rails 的哪个部分负责此功能,如何将其包含在基于 ActiveModel 的资源中?
澄清:
- 用户完成并提交包含两个值的表单。
- 验证失败,因为其中一个或多个值无效。
- 控制器重新渲染模型的“新”视图。
- 重新呈现的表单包含错误消息。
- 重新渲染的表单预先填充了两个无效数据值。
这是我不理解的第 5 步,尽管我的 Active Record 资源具有几乎相同的控制器代码和相同的视图代码,但我的 Active Model 资源并没有发生这种情况。
代码(根据要求)
控制器:
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.valid?
AgentMailer.contact_email(@contact).deliver
redirect_to "/contact", notice: 'Your request was successful.'
else
#TODO Figure out why data from an invalid submission does not carry over
render action: "new"
end
end
看法:
<%= form_for(@contact, :html => {:class => "new_contact custom"}) do |f| %>
<% if @contact.errors.any? %>
...
<% end %>
...
<%= f.label :name %>
<%= f.text_field :name, options = {placeholder: "Enter name here"} %>
...
<% end %>