2010-12-21 1 views
0

/user.rbaucune erreur de méthode dans relation un à plusieurs modèles

class User < ActiveRecord::Base 
has_many :clubs, :dependent => :destroy 
has_many :announcements, :dependent => :destroy 
end 

modèles/announcement.rb

class Announcement < ActiveRecord::Base 
belongs_to :user 
belongs_to :club 
end 

modèles/club.rb

class Club < ActiveRecord::Base 
    belongs_to :user 
    has_many :announcements, :dependent => :destroy 
end 

contrôleurs/annonces /announcements_controller.rb

def index 
@announcements = Announcement.find(:all, :include => [:user, :club]) 
end 

Problème:

Quand je tape ce code,

vues/annonces/index.html.erb

<% @announcements.each do |announcement| %> 
<%= announcement.user.username %> 
<% end %> 

Je reçois cette erreur:

NoMethodError in Announcements#index 
undefined method `username' for nil:NilClass 

quand je change de code, ça marche.

<% @announcements.each do |announcement| %> 
<%= announcement.club.user.username %> 
<% end %> 

Pourquoi le premier code ne fonctionne-t-il pas? Quelle est la différence entre ces codes. Merci.

+0

L'utilisateur n'a pas d'utilisateur associé à l'une de vos annonces. Utilisez 'rails console' et vérifiez vos objets Announcements pour voir si c'est le cas. –

Répondre

2

Il semble que vous ayez une annonce qui n'a pas d'utilisateur défini, mais qui a un club qui à son tour a un utilisateur. Peut-être envisager d'ajouter une validation pour exiger que la colonne :user_id sur l'annonce soit présente.

+0

Merci. Ça a marché. – railslove