2015-06-24 122 views
1

色器件部件I有keywordsgroups,然後一組,並設計之間groupsbelongs_tomember協會之間的has_and_belongs_to_many關聯。Ruby on Rails的 - 代表上has_and_belongs_to_many關聯

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

從我可以看到有關鍵字和組之間的多對多映射。所以groups方法會返回一組組而不是單個記錄。所以,當你委派'成員'時,它會被委派給一個組的集合,而不是你所期望的那樣。

#<ActiveRecord::Associations::CollectionProxy []>在您的錯誤消息 是羣組集合。

如果您正在尋找收集你可能需要做類似的所有組的成員:

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

我想獲得的時候都添加新的關鍵字當前成員擁有的關鍵字數量。 –

+0

任何想法我怎麼能做到這一點? –

+0

由於組belongs_to成員,也許成員has_many組?所以也許'member.groups.collect {| group | group.keywords} .uniq'可能有效。 – Sushma