Ruby on Rails - 委托has_and_belongs_to_many关联的设计成员

时间:2015-06-24 15:50:08

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 devise

我在has_and_belongs_to_manykeywords之间建立了groups关联,然后在组和设计之间建立了groups belongs_to member关联。

class Keyword < ActiveRecord::Base
  has_and_belongs_to_many :groups
  delegate :member, to: :groups
  validate :keywords_within_limit, on: :create

  def keywords_within_limit
    if self.member.keywords(:reload).count >= self.member.keyword_limit
       errors.add(:keyword, "exceeded limit")
    end
  end
end

我尝试使用delegate访问我当前的成员方法,但收到错误NoMethodError - undefined method member for #<ActiveRecord::Associations::CollectionProxy []>:

我可以通过self.methods

看到成员是一种方法

为什么我无法使用delegate访问我的成员方法?

1 个答案:

答案 0 :(得分:1)

从我可以看到,关键字和组之间存在多对多的映射。因此,groups方法将返回组的集合,而不是组的单个记录。因此,当您委派'member'时,它会被委托给一组组而不是您期望的组对象。

#<ActiveRecord::Associations::CollectionProxy []&gt;在您的错误消息中 是集合集合。

如果您希望收集所有群组的成员,您可能需要执行以下操作:

def members
  groups.collect { |group| group.member }
end