Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中使用includes()和where()时ArgumentError(参数数目错误(给定1,预期2))_Ruby On Rails - Fatal编程技术网

Ruby on rails 在Rails中使用includes()和where()时ArgumentError(参数数目错误(给定1,预期2))

Ruby on rails 在Rails中使用includes()和where()时ArgumentError(参数数目错误(给定1,预期2)),ruby-on-rails,Ruby On Rails,我试图调试rails5.1.5,postgres2.1.3中的一个问题。此查询在我的生产环境中运行良好,但当我在本地复制数据库并尝试执行相同操作时,会出现以下错误: Author.includes(:books).where({books: {id: 1}}) ArgumentError (wrong number of arguments (given 1, expected 2)) 我尝试过的其他每一个查询都有效,我检查过的所有数据/版本似乎都相同。如果数据库中根本没有作者,这也会失败

我试图调试
rails5.1.5
postgres2.1.3
中的一个问题。此查询在我的生产环境中运行良好,但当我在本地复制数据库并尝试执行相同操作时,会出现以下错误:

Author.includes(:books).where({books: {id: 1}})

ArgumentError (wrong number of arguments (given 1, expected 2))
我尝试过的其他每一个查询都有效,我检查过的所有数据/版本似乎都相同。如果数据库中根本没有作者,这也会失败

在Author模型中,关系是这样建立的

has_many :books, dependent: :destroy
我尝试过完全删除数据库,从头开始重新创建数据库,等等


有人知道从这里挖到哪里吗?

这是不是太过分了?或者您有现有的作用域吗

Author.includes(:books).where(books: {id: 1})
而不是

Author.includes(:books).where({books: {id: 1}})

这是rails 5语法,如果您使用的是rails 5。

在的rails文档中,您将在这里看到它是如何工作的

User.includes(:posts).where('posts.name = ?', 'example')
所以,当rails对你大喊大叫时

ArgumentError (wrong number of arguments (given 1, expected 2))
它可能希望你给它

Author.includes(:books).where("books.id = ?", 1)
这对我来说没有多大意义(因为你的语法应该可以工作),但当你得到“它需要2个参数”时,这是你首先想到的,因为在旧版本的Rails中,它就是这样工作的

其他一些选项可能包括使用(我的最爱):


它本质上使用ActiveRelation执行左连接,将两个查询合并为一个sql查询。

回答得好。顺便提一下,这种语法早于rails 5。你说的超嵌套/现有范围是什么意思?我用我的第一个命令在Rails控制台中运行这个命令,所以没有太多其他的事情发生。我尝试了新的语法,它有完全相同的行为;在生产环境下工作,在本地错误的参数数量下失败。是否有堆栈跟踪来跟踪该错误?你确定错误是由那行代码引起的吗?我正在rails控制台上运行它,所以我确定,其余的回溯只是回溯(最近一次调用):1:from(irb):3。它可能来自ActiveRecord等中被该行代码调用的任何内容,但回溯中没有其他内容可以提供提示。首先将其拆分为两部分(
q=Author.includes(:books);q=q.where(…)
),然后包括堆栈跟踪。
Author.joins(:books).merge(Book.where(id: 1))