2011-07-15 17 views
5

Tengo algunos parciales compartidos que puedo procesar desde cualquier controlador fino, sin embargo, estoy teniendo problemas para representar parciales de formulario desde otro controlador. Estoy queriendo ser capaz de añadir notas a mis contactosRendering parciales de formulario desde otros controladores

En mis contactos/show.html.erb Tengo el siguiente

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

En mis notas/_form.html.erb Tengo el siguiente

<%= 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 %> 

Sin embargo, me sale el error:

Mostrando /Applications/Rails/apps/saas31/app/views/notes/_form.html.erb donde la línea # 1 planteó:

método no definido `nombre_del_modelo' para NilClass: Clase

fuente extraída (alrededor de la línea # 1):

1: <% = form_for @note do | F | %> 2: <% = render 'compartida/error_messages',: objeto => f.object%>

estoy empezando a conseguir la caída de los carriles, pero con algunos pequeños problemas frustrante como es de esperar, cuando aprendiendo algo nuevo, supongo. ¿Alguien tiene alguna idea?

Respuesta

17

Las variables locales se deben pasar en un hash de locales.

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

Read section 3.4.4 here.

Su parcial tampoco debe utilizar variables de instancia, cambiar los siguientes:

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

a:

<%= form_for note do |f| %> 

edición

Si desea utilizar una variable de instancia, puede hacer lo siguiente:

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

Sí y, además, volver a escribir el parcial a utilizar 'nota' en lugar de '@note' (Recuerde actualizar ninguna de las vistas existentes que requieren el parcial a utilizar el (: Forma locales => ...)) . – moritz

+0

Gracias chicos que funciona! El único problema es que ahora ninguna de las acciones CRUD en el controlador de notas que usa ese formulario funciona porque declaran una variable de instancia. ¿Debo volver a escribir estas acciones para pasar explícitamente la variable de nodo cuando se procesan? ¿son estas las mejores prácticas? – Nick

+0

@Nick, ver mis ediciones. – Gazler

2

se topó con el mismo tema y este post fue útil en la resolución. Agregando mis notas y con suerte esto ayudará a alguien más :)

Tenía un controlador de usuario y un _form.html.erb que funcionaba bien cuando tenía acceso a la página/users/new. Intenté representar el formulario como parcial desde mi /layouts/application.html.erb, ya que quería dar a los usuarios la posibilidad de crear un nuevo usuario desde cualquier página.

Terminé creando un nuevo método (new_user) en application_helper.rb. Aquí está el código:

def new_user 
    User.new  
end 

Luego renderizo el parcial desde la aplicación.html.erb con:

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