【问题标题】:has many through problem有很多通过问题
【发布时间】:2011-02-27 09:57:56
【问题描述】:

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

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/

【问题讨论】:

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


    【解决方案1】:

    您的 find 类方法正在使用 guest 而不是 guests

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

    我还注意到您正在覆盖内置的 ActiveRecord 方法 find,不推荐这样做。

    【讨论】:

    • 哦,废话!我没有意识到我不小心覆盖了它。当我重构时,我认为我的方法是 find_group 而不是 find。哈哈!感谢那个现场人。
    【解决方案2】:

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

    【讨论】:

    • @shreyas...在这种情况下,Guest.first.groups 本身会导致未定义的方法错误。不会吗?
    • 会的。这就是正在发生的事情。看起来他有一个组对象,但没有来宾对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多