유효성 검사에 실패하면 다시로드 할 수있는 모델이 아닌 form_for을 얻으려고합니다.render : MissingTemplate 오류가 발생했습니다.
<%= form_for(:site_device, :url => {:controller=>"site_devices", :action=>"create"}) do |f| %>
<tr>
<%= f.hidden_field :site_id, :value => site.id %>
<!-- etc -->
</tr>
<% end %>
: 양식 (응용 프로그램/뷰/사이트/devices.html.erb)를 포함하는 페이지는 렌더링 부분으로 인라인 표시 템플릿
<div id="site-device-form">
<%= render partial: "shared/site_device_form", locals: {site: @site, site_device: @site_device} %>
</div>
양식으로 양식을로드하는 코드를 포함
이 양식은 처음에 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"
어떤 아이디어가 잘못 되었나요? 어떻게에 렌더링받을 수 있나요 : 나는 그것을 준 부분에 따라 사업부-ID를 업데이트를
감사합니다,
스티브
여기서 보여주는 것은 페이지를 다시 렌더링하지 않고 저장에 실패하면 일부 j를 실행하는 것입니다. 그렇다면 format.html {}에서 format.js {} 블록이 필요하지만, 요청을 XHR로 변경해야 할 가능성이 있는지 확신 할 수 없습니다.양식을 표시하기 위해 인스턴스 변수로 전체 페이지 (템플리트)를 다시 렌더링하는 것이 더 쉬울 수도 있습니다. – miked
안녕하세요. 귀하의 회신에 감사드립니다. 렌더링해야하는 JS입니까? 유효성을 검사하지 못했을 때 양식의 부분을 다시 렌더링해야한다고 생각했습니다. 양식의 부분 템플리트는 모델 오류 (처음에는 비어 있음)를 양식 표시의 일부로 표시합니다. 따라서 유효성 검사가 실패하면 모델 오류는 이제 비어 있지 않습니다. 그래서 내 생각에 나는 폼을 다시 렌더링하기 만하면됩니다. 폼은 오류가 나타나고 나타나야하므로 수정할 수 있습니다. 사물에 접근하는 것이 잘못된 방법일까요? XHR : 이것은 render (: update)가 (PragProg Rails 서적의 p325에 따라)해야하는 것이 아닙니다. Thxs, Steve –
안녕하세요 steve ... render : update 대신에 render : action을 사용하면 효과가 있다고 생각되는 솔루션을 추가했습니다. – miked