ruby/rails:如何在调用关联的 class 方法中访问实例

ruby/rails: How to access instances inside a class method called on an association

由于太长的原因无法在此处列出,我无法使用典型的 has_many/belongs_to 配置。我需要访问 class 方法内的关联中的所有实例。我有以下

class Impression
    def self.tags
        Tag.where(id: self.map(&:tag_id))
    end
end

我的想法是这样我就可以写这样的东西并拥有 return 给定印象的所有标签:

i = Impression.last(50)
puts "self is #{self.inspect}"
i.tags
    

问题是,当我这样做时,我得到:

self is Impression(id: integer, impressionable_type: string, ......
NoMethodError (undefined method `map' for #<Class:0x00007ff5562cadc8>)

如何访问由 i = Impression.last(50)

编辑的关系 return 中的实例

如果你该不说,你可以做:

class Impression
  def self.tags
    Tag.where(id: self.all.select(:tag_id))
  end
end

rails 当你在关系上调用它时,它会发挥它的魔力。

如果 tag_id 不是数据库字段 - 将 select 替换为 to_a.map(&:tag_id)