2010-12-09 34 views
0

J'utilise ce code dans mon application \ vues \ pages \ fichier home.html.erbmodèle Render avec partiel

<%= render :template => 'users/new' %> 

J'utilise ce code dans mon application \ vues \ Users \ fichier new.html.erb

<%= render :partial => 'users/form' %> 

Afficher la "page d'accueil" Je reçois cette erreur:

NoMethodError dans les pages # Accueil

méthode non définie MODEL_NAME » pour NilClass: Classe

source décompressée (autour de la ligne n ° 1):

1: <% = form_for (@user) do | f | %>

2: <% si @ user.errors.any? %>

...

Je lis this, mais cela ne fonctionne pas. Que puis-je faire pour rendre le template avec "sub-partial" correctement?

Répondre

1

Dans votre méthode PagesController # la maison(), vous devez définir @user - probablement avec:

@user = User.new 
+0

Merci, ça marche. J'ai fondé que vous pouvez faire la même chose avec: <% = render: template => 'users/new',: object => @user = User.new%> dans le fichier home.html.erb. – user502052

+0

Ouais - il est généralement plus propre de faire votre création d'objet dans vos contrôleurs que vos vues, cependant. – Nate

+1

Les partiels sont plus réutilisables quand vous ne travaillez pas avec les variables d'instance, donc même le nettoyeur serait '<% ​​= render" form ",: user => @user%>' et dans le partial, faites quelque chose comme '<% = form_for utilisateur do | f | %> '(n'utilisant pas l'ivar) – iain