gpt4 book ai didi

ruby-on-rails - Rails4 : ActiveRecord. ..CollectionProxy: NoMethodError

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:43 24 4
gpt4 key购买 nike

我在 rails4 中有一个奇怪的错误,阻止我在 has_many 关联上链接“collect”。

我有 self has_many > 文件夹
然后 文件夹 has_many > share_links
share_link has_many > devices

这按预期工作:

self.folders.first.share_links.first.devices

这行不通:

self.folders
.collect { |folder| folder.share_links }
.collect { |share_link| share_link.devices }
.uniq.count

有错误:

#<NoMethodError: undefined method `devices' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_ShaShareLink:0x007ff3b5f0dbf0>>

似乎 collect 不像我想的那样起作用?!

最佳答案

folder.share_links 返回一个数组。所以 self.folders.collect { |folder| 的结果folder.share_links 是一个二维数组。您必须使用 flatten

将其转换为一维数组
self.folders
.collect { |folder| folder.share_links }.flatten
.collect { |share_link| share_link.devices }.flatten
.uniq.count

SQL

 Model
.joins(:folders)
.joins("share_links on share_links.folder_id = folders.id")
.joins("devices on devices.share_links_id = share_links.id")
.count("distinct('<id>')")

关于ruby-on-rails - Rails4 : ActiveRecord. ..CollectionProxy: NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com