如果验证失败,我正在尝试让非模型 form_for 重新加载。包含表单的页面 (app/views/sites/devices.html.erb) 包含将表单加载为模板的代码
<div id="site-device-form">
<%= render partial: "shared/site_device_form", locals: {site: @site, site_device: @site_device} %>
</div>
然后表单作为呈现的部分显示为内联:
<%= form_for(:site_device, :url => {:controller=>"site_devices", :action=>"create"}) do |f| %>
<tr>
<%= f.hidden_field :site_id, :value => site.id %>
<!-- etc -->
</tr>
<% end %>
所以表单最初是从 SitesController 页面实例化的,但是当它创建一个 SiteDevice 时,表单会调用 SiteDevicesController#create 方法来创建页面。
SiteDevice 有一些验证码——如果它失败了怎么办。我试图让页面重新加载,所以表单代码只是重新显示(一旦重新显示工作,我们将得到显示的错误)
if @site_device.save
flash[:notice] = 'SiteDevice was successfully created.'
format.html { redirect_to(@site_device) }
else
#re-render form
format.html { render(:update) do |page|
page[:site-device-form].replace_html partial: 'shared/site_device_form'
end }
end
根据我的理解, render(:update) 应该渲染块,传入页面模板。但我得到的是一个 ActionView::MissingTemplate 错误:
ActionView::MissingTemplate (Missing template site_devices/update, application/update with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
* "/home/ruby/frontier_development/Frontier/app/views"
任何想法这里出了什么问题?如何让渲染:根据我给它的部分更新 div-id
谢谢,
史蒂夫