railslove
railslove

Reputation: 3

no method error in one to many relationship

models/user.rb

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

models/announcement.rb

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

models/club.rb

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

controllers/announcements/announcements_controller.rb

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

Problem:

When i type this code,

views/announcements/index.html.erb

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

I get this error:

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

when i change code to this, it works.

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

Why is the first code is not working? What is the difference between these codes. Thanks.

Upvotes: 0

Views: 655

Answers (1)

idlefingers
idlefingers

Reputation: 32067

It looks like you've got an announcement which has no user set, but does have a club which in turn does have a user. Perhaps consider adding a validation to require that the :user_id column on announcement is present.

Upvotes: 2

Related Questions