模型/ 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 %>
为什么第一个代码不起作用?这些代码之间有什么区别。感谢。
答案 0 :(得分:2)
看起来你有一个没有用户设置的公告,但确实有一个俱乐部反过来确实有一个用户。也许可以考虑添加验证,以要求公告中的:user_id
列存在。