2014-01-10 124 views
0

我陷入了基本的東西。渲染局部對象,導軌

我訂閱了控制器,並且我創建了表單部分,所以我可以從聯繫頁面進行新的訂閱。

我的部分看起來像這樣:

<%= form_for(@subscribe) do |f| %> 
    <% if @subscribe.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@subscribe.errors.count, "error") %> prohibited this subscribe from being saved:</h2> 

     <ul> 
     <% @subscribe.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :subject %><br /> 
    <%= f.text_field :subject %> 
    </div> 
    <div class="field"> 
    <%= f.label :message %><br /> 
    <%= f.text_area :message %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

我使用這個代碼聯繫人/索引頁面內呈現部分:

<%= render 'subscribes/form', :locals => { :subscribe => @subscribe} %> 

在此之後,我得到這樣的錯誤:

undefined method `model_name' for NilClass:Class 

我試圖改變對象名稱,來自similair中的一些語法在阻塞溢出中消失。

像:

render "subscribes/form", collection: @subscribe 
render :partial => 'subscribes/form', :object => Subscribe.new 

我想我做的事情完全錯誤或一些達姆簡單的錯誤。我在做。 :)

+1

傳遞局部參數是正確的,但在局部模板中沒有提及model_name屬性。錯誤是在別的地方嗎? – lucke84

+0

@ lucke84我認爲它發生是因爲它不能識別partials對象。因爲當我刪除部分渲染,頁面加載就好,沒有錯誤。 – Edgars

+0

嘗試不傳遞變量。 '<%= render'/ subscribes/form'%>' –

回答

2

那麼,首先你根本沒有在你的視圖中使用傳遞的參數 - 它將是subscribe,而不是@subscribe。它不會改變它應該工作的事實,因爲應該設置實例變量。它看起來像設置爲零 - 你需要檢查你的控制器動作並找出原因。

0

除非它是一個錯字,你實現你寫這部分的第一次:

<%= render 'subscribes/form', :locals => { :subscribe => @subscribe} %> 

雖然它應該是:

<%= render :partial => 'subscribes/form', :locals => { :subscribe => @subscribe} %> 

此外,該部分不應參考@subscribe變量,但爲subscribe(不帶@),因爲它是傳遞給模板的變量名稱。

+3

沒有什麼區別 - 渲染器內的視圖在默認情況下呈現部分渲染。 – BroiSatse

+0

@BroiSatse我不知道,謝謝你的解釋。 – lucke84