如果驗證失敗,我試圖獲取非模型form_for重新加載。包含表單(APP /視圖/位點/ devices.html.erb)該頁面包含代碼來加載的形式作爲模板render:update給出MissingTemplate錯誤
<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
(我們會得到顯示一次重新顯示作品中的錯誤),渲染(:更新)應該呈現塊,傳入頁面模板。但我得到的是一個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
感謝,
史蒂夫
你在這裏展示的是你不想重新渲染頁面,但只是執行一些js,如果保存失敗?如果是這樣,我不確定您可以在format.html {}內執行此操作 - 可能需要format.js {}塊,但您的請求可能必須更改爲XHR。使用實例變量重新呈現整個頁面(模板)以顯示錶單可能會更容易。 – miked
嗨miked。感謝您的答覆。是JS我需要渲染 - 我想我只需要重新渲染表單的部分時,它無法驗證?表單的部分模板將模型錯誤(最初爲空)作爲表單顯示的一部分。所以如果驗證失敗,模型錯誤現在是非空的。所以我的想法是,我只是重新渲染表單,現在應該顯示錯誤,以便糾正錯誤。這是處理事情的錯誤方式嗎? XHR:這不是render(:update)應該做的(按照PragProg Rails書的p325)。 Thxs,Steve –
嗨史蒂夫...我添加了一個解決方案,我認爲可能會爲你使用render:action而不是render:update。 – miked