![](/img/trans.png)
[英]Rails “undefined method for ActiveRecord_Associations_CollectionProxy”
[英]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.