我在has_and_belongs_to_many
和keywords
之间建立了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
访问我的成员方法?
答案 0 :(得分:1)
从我可以看到,关键字和组之间存在多对多的映射。因此,groups方法将返回组的集合,而不是组的单个记录。因此,当您委派'member'时,它会被委托给一组组而不是您期望的组对象。
#<ActiveRecord::Associations::CollectionProxy []
&gt;在您的错误消息中
是集合集合。
如果您希望收集所有群组的成员,您可能需要执行以下操作:
def members
groups.collect { |group| group.member }
end