【问题标题】:Ruby on Rails - delegate devise member on has_and_belongs_to_many associationRuby on Rails - has_and_belongs_to_many 关联的委托设计成员
【发布时间】:2015-06-24 15:50:07
【问题描述】:

我在keywordsgroups 之间有一个has_and_belongs_to_many 关联,然后在组和设计之间有一个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 #&lt;ActiveRecord::Associations::CollectionProxy []&gt;:

我可以通过self.methods看到成员是一种方法

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

【问题讨论】:

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


    【解决方案1】:

    据我所知,关键字和组之间存在多对多映射。因此,groups 方法将返回一组组,而不是组的单个记录。因此,当您委托“成员”时,它被委托给一组组,而不是您期望的组对象。

    错误消息中的#&lt;ActiveRecord::Associations::CollectionProxy []> 是组集合。

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

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

    【讨论】:

    • 我正在尝试获取当前成员在添加新关键字时拥有的关键字数量。
    • 知道我该怎么做吗??
    • 既然组belongs_to 成员,也许成员has_many 个组?所以也许` member.groups.collect { |group| group.keywords }.uniq` 可能会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2013-11-30
    相关资源
    最近更新 更多