由于 Squeel gem:错误:未定义的方法"调用"#<ActiveRecord::Associations::CollectionProxy []>



我最近不得不重新编写一个名为CtrlPanel的应用程序,我已经完成并运行良好。(感谢StackOverflow上的几个用户的帮助!)

我现在到了第二个应用程序,我必须重写称为排放网关。就像CtrlPanel这个WebApp有一个叫做squeel的宝石,它使用自己的Monkey Patched DSL语言进行DB查询,所以我必须在正常的Ruby on Rails/ActiveRecord查询中重写所有这些。

这个应用程序有更多的这些查询,他们更复杂,而不是只是几个字段映射到其他字段,他们正在使用模型名称和符号名称组合。我需要重写所有的,我有一个问题在第一个。

错误不是我所期望的?它并没有给我一个查询本身的错误它给了我一个错误,如果我理解正确的话,是什么在调用查询?下面是错误信息:

未定义方法' call' for #

根据Better Errors,它是projects_controller。正在调用的Rb:

class ProjectsController < ApplicationController
load_and_authorize_resource
def dashboard
@projects = current_user.authorized_projects.order("created_at desc")
end

在我开始进行故障排除兔子洞之前,我想确定的是,我想知道我的查询重写是否看起来不错,即使它没有给我语法错误,我确信它可能有其他错误,我仍然是相对较新的。

下面是使用那个该死的压缩语言的原始查询:

#Project.joins{vendor}.where{(projects.vendor_id.eq my{ vendor_id }) |
(vendors.parent_vendor_id.eq my{ vendor_id })}.uniq

这是我重写的查询:

Project.joins(vendor).where({projects.(:vendor_id) => my.(:vendor_id)}) 
OR
({vendors.(:parent_vendor_id) => my(:vendor_id)}).uniq

我想我会尽量保持它非常简单,只提供最低限度的。基于以上,我有查询的语法正确还是我得到这个错误?我不需要重写使用classname的ctrlpanel上的任何查询。如果它有助于了解这个应用程序是一个更老的应用程序,用Ruby 2.0和Rails 3.2编写的。这是一个皇家痛苦让它启动,并得到登录提示终于出现,我得到这个错误后,它接受我的登录。

如果我需要张贴整个用户模型,项目模型&控制器和供应商模型,以便能够回答问题,如果我的查询是正确的,或者揭示有关此错误的更多信息,让我知道,我会添加它们。我试图保持更简单的条款,使它更容易,如果可能的话,但如果不能做到这一点,我很乐意提供其余的。

提前感谢任何可以帮助的人。

斯科特

感谢@engineersmnky

这个查询成功了:

Project.joins(:vendor)
.where(projects: {vendor_id: vendor_id})
.or(
Project.joins(:vendor)
.where(vendors: {parent_vendor_id: vendor_id})
)

很抱歉回复晚了。

非常感谢你的帮助。

斯科特

相关内容

最新更新