繁体   English   中英

ActiveRecord_Associations_CollectionProxy的未定义方法'id_tag'

[英]undefined method 'id_tag' for ActiveRecord_Associations_CollectionProxy

在我的CrawlProduct类中,我想从表ProductInfo中获取id_tag:

class CrawlProduct < ActiveRecord::Base
    belongs_to :crawl_link

    css_id = self.crawl_link.domain.product_infos.id_tag
end

CrawlProducts有一个外键crawl_link ,而表CrawlLinks有一个外键domain ,这当然来自表Domain 并且ProductInfo属于域。

class CrawlProduct < ActiveRecord::Base
        belongs_to :crawl_link 
end   

class CrawlLink < ActiveRecord::Base
        belongs_to :domain
        has_one :crawl_product
end

class Domain < ActiveRecord::Base
        has_many :crawl_links
        has_many :product_infos
end

class ProductInfo < ActiveRecord::Base
        belongs_to :domain
end

但是最后,我总是收到以下错误:

undefined method `id_tag' for #<ProductInfo::ActiveRecord_Associations_CollectionProxy:0x0055d72e423640>

如何访问id_tag 据我所知,没有一栏遗漏。

编辑 :答案后,我得到一个不同的错误。

NameError: undefined local variable or method `id_tag' for #<CrawlProduct:0x0055d72fcd9fe0>

我不知道为什么我遇到这个问题。 这是我创建id_tag的方法:

class Domain < ActiveRecord::Base
   domain = Domain.create(domain: 'https://www.example.com')
   product_info = ProductInfo.create(domain: domain, id_tag: 'some content')
end

self.crawl_link.domain.product_infos是实例的集合,因此您不能在其上调用实例方法,要在每个项目上调用它,您应该迭代each集合或使用map收集ID。 要收集ID而不创建实例,可以使用pluck

self.crawl_link.domain.product_infos.pluck(:id_tag)

self.crawl_link.domain.product_infos将返回一组对象,因此,您无法从集合中检索id_tag(一个字段)。

相反,您可以使用。

class CrawlProduct < ActiveRecord::Base
    belongs_to :crawl_link

    def some_action
      css_ids = self.crawl_link.domain.product_infos.pluck(:id_tag)

      (or)

      css_ids = self.crawl_link.domain.product_infos.map(&:id_tag)
    end
end

我认为您错误地访问了product_infos 您需要指定所需的那个,然后从中访问id_tag。

Rails正确地告诉您

undefined method `id_tag' for #<ProductInfo::ActiveRecord_Associations_CollectionProxy:0x0055d72e423640>

因为关系是has_many。

如果您只想访问数据库提取的第一个数据库(除非指定,否则不指定特定顺序),您可以执行

css_id = self.crawl_link.domain.product_infos.first.id_tag

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM