一对多关系中没有方法错误

时间:2010-12-21 19:53:58

标签: ruby-on-rails activerecord

模型/ user.rb

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

模型/ announcement.rb

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

模型/ club.rb

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

控制器/通知/ announcements_controller.rb

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

问题:

当我输入此代码时,

视图/通知/ index.html.erb

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

我收到此错误:

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

当我将代码更改为此时,它可以正常工作。

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

为什么第一个代码不起作用?这些代码之间有什么区别。感谢。

1 个答案:

答案 0 :(得分:2)

看起来你有一个没有用户设置的公告,但确实有一个俱乐部反过来确实有一个用户。也许可以考虑添加验证,以要求公告中的:user_id列存在。