有很多问题

时间:2011-02-27 09:57:57

标签: ruby-on-rails activerecord associations has-many-through

我与我的团队和嘉宾模特有很多关系。以下是模型:

class Group < ActiveRecord::Base  
  has_many :memberships, :dependent => :destroy
  has_many :guests, :through => :memberships

  def self.find(group)
    self.find_by_name(group).guest.collect{ |x| x.name  }
  end
end

class Guest < ActiveRecord::Base
  has_many :memberships, :dependent => :destroy
  has_many :groups, :through => :memberships
end

class Membership < ActiveRecord::Base
  belongs_to :guest
  belongs_to :group
end

我正在检查控制台,结果如下:

ruby-1.9.2-head :001 > Group.first.guests
=> [] 

ruby-1.9.2-head :002 > Guest.first.groups
(Object doesn't support #inspect)
=> 

为什么第二个不起作用?我尝试检查组的类,但它总是返回错误:

ruby-1.9.2-head :005 > Guest.first.groups.class
NoMethodError: undefined method `guest' for nil:NilClass

任何人都可以帮我吗?我实际上只是想尝试遵循本指南:http://millarian.com/programming/ruby-on-rails/quick-tip-has_many-through-checkboxes/

2 个答案:

答案 0 :(得分:1)

您的find课程方法使用来宾而不是来宾

self.find_by_name(group).guest.collect{ |x| x.name  }

我还注意到你覆盖了一个内置的ActiveRecord方法find,这是不推荐的。

答案 1 :(得分:0)

这种情况正在发生,因为Guest.first正在返回nil。创建一个来宾对象并试一试。