2011-07-15 88 views
5

我有幾個可以從任何控制器渲染的共享部分,但是我從另一個控制器渲染形式部分時遇到了一些問題。我希望能夠添加註釋到我的聯繫人從其他控制器渲染形式部分

在我的聯繫人/ show.html.erb我有以下

<% render :partial => "notes/form", :note => Note.new %> 

在我的筆記/ _form.html.erb我有以下

<%= form_for @note do |f| %> 
    <%= render 'shared/error_messages', :object => f.object %> 
    <p> 
    <%= f.label :content %><br /> 
    <%= f.text_field :content %> 
    </p> 
    <p> 
    <%= f.label :contact_id %><br /> 
    <%= f.number_field :contact_id %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 

但是我得到的錯誤:

顯示/Applications/Rails/apps/saas31/app/views/notes/_form.html.erb其中線#1提出:

未定義的方法`模型名稱」的NilClass:類

提取的源(圍繞線#1):

1:<%=的form_for @note做| F | %> 2:<%=渲染的共享/ error_messages',:對象=> f.object%>

我開始獲得軌道的懸掛但具有如可以預期的,當一些小令人沮喪的問題學習任何新的我想。有人有主意嗎?

回答

17

您的本地變量應該通過本地散列傳遞。

<% render :partial => "notes/form", :locals => {:note => Note.new} %> 

Read section 3.4.4 here.

你的部分也不應使用實例變量,改變如下:

<%= form_for @note do |f| %> 

到:

<%= form_for note do |f| %> 

編輯

如果你想用一個實例變量,你可以做到以下幾點:

<% render :partial => "notes/form", :locals => {:note => @note} %> 
+1

是的,並且另外重寫部分使用'note'而不是'@note'(請記住更新任何現有視圖調用partial以使用(:locals => ...)表單) 。 – moritz

+0

謝謝你們的作品!唯一的問題是,現在使用該表單的Notes控制器上的CRUD操作都沒有效,因爲它們聲明瞭一個實例變量。我需要重寫這些操作,以在顯示時顯式傳遞節點變量嗎?這是最佳做法嗎? – Nick

+0

@尼克,看我的編輯。 – Gazler

2

遇到同樣的問題,這個職位是解決有幫助。添加我的筆記,並希望它會幫助別人:)

我有一個用戶控制器和一個_form.html.erb,我會訪問/用戶/新頁時呈現罰款。我試圖將表單呈現爲我的/layouts/application.html.erb中的部分內容,因爲我想讓用戶能夠從任何頁面創建新用戶。

我最終在application_helper.rb中創建了一個新方法(new_user)。下面是代碼:

def new_user 
    User.new  
end 

我然後渲染部分從application.html。erb與:

<%= render :partial => 'users/form', :locals => {:user => new_user} %>