0

我有一个有很多与我的团体和客人模型的关系。下面是型号:有很多通过问题

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/

回答

1

find类的方法是使用,而不是客人客人

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

我也注意到,您在重写的方法ActiveRecord的内置,发现,不推荐。

+0

哦,废话!我没有意识到我意外地压倒了它。当我重构时,我认为我的方法是find_group而不是find。大声笑!谢谢那个地点的人。 – corroded 2011-02-27 16:10:44

0

这是因为Guest.first返回零。创建一个访客对象并尝试一下。

+0

@shreyas ...在这种情况下,Guest.first.groups本身会导致未定义的方法错误..不是吗? – rubyprince 2011-02-27 13:25:34

+0

是的。这就是发生的事情。看起来他有一个组对象,但没有访客对象。 – Shreyas 2011-02-27 14:01:14