2010-06-22 2 views
0
Showing app/views/posts/_post.html.erb where line #4 raised: 

undefined method `name' for nil:NilClass 

Extracted source (around line #4): 

1: <p> 
2: <b>Post Content:</b> 
3: <%=h post.content %> by 
4: <%=h post.author.name %> 
5: </p> 

Voici mon modèle messages:méthode non définie pour nil: NilClass mais l'objet existe dans la console

class Post < ActiveRecord::Base 
    belongs_to :board 
    belongs_to :author, :class_name => "User" 
end 

La chose étrange est, si je commente sur post.author.name, cela fonctionne. Et .... Je l'ai essayé dans la console, il fonctionne très bien:

>> post 
=> #<Post id: 1, content: "trying", user_id: 2, created_at: "2010-06-22 04:24:53", updated_at: "2010-06-22 04:24:53"> 
>> post.author 
=> #<User id: 2, login: "[email protected]", name: "test1",.... 
>> post.author.name 
=> "test1" 

En fait, si je change post.author.name à post.user_id, il affiche l'ID correct (ce qui est 2) ....

Quel est le problème ??

Merci beaucoup.

+0

Pouvez-vous afficher la méthode d'action du contrôleur qui affiche _post.html? et la vue qui le rend aussi? – Pablo

Répondre

0

Deux choses:

  1. Êtes-vous sûr le poste que vous vérifiez dans la console est le même que celui qui est en cours d'accès à la vue? Peut-être que vous faites quelque chose comme post = Post.first et ce n'est pas le bon?
  2. Dans la source de vue extraite, vous faites référence à une variable non-instance. Affectez-vous post ailleurs dans la vue (comme une boucle)? Si ce n'est pas le cas, le changer en @post pourrait le faire. Bien que ce soit improbable, puisque le message d'erreur serait probablement différent.
+0

Oui, c'est mon seul post, mais je suis en boucle à travers tous les messages en appelant un partiel. >> Post.all => [# ] – user357203

1

Essayez de spécifier la valeur de: foreign_key

0

Vous devez spécifier aussi: foreign_key => "user_id". Rails utilisera par défaut le symbole transmis à belongs_to pour dériver le champ de clé étrangère. Dans votre cas, même si vous avez spécifié le nom de la classe, il recherchera author_id en tant que clé étrangère. L'option class_name indique à Rails le type d'objet auquel s'attendre.

Questions connexes