用于 ActiveRecord_Relation 的 Rails 未定义方法“sanitize_sql_array”

Posted

技术标签:

【中文标题】用于 ActiveRecord_Relation 的 Rails 未定义方法“sanitize_sql_array”【英文标题】:Rails undefined method `sanitize_sql_array' for ActiveRecord_Relation 【发布时间】:2019-03-05 16:30:48 【问题描述】:

我最近在我的工作机器上重新安装了我的操作系统,提取了我现有的 Ruby on Rails 项目,并在我的应用程序的某个页面上收到以下错误:

undefined method `sanitize_sql_array' for #<Property::ActiveRecord_Relation:0x007fb0c1780630>
Did you mean?  sanitize_for_mass_assignment

我不确定问题是由什么引起的,我找不到任何相关信息。

违规行显然是count_data = @properties.group_by_month('properties.created_at', format: "%b %Y").size

@properties 是一个 ActiveRecord_Relation。

我在 Rails 版本 5.1.6.1 和 ruby​​ 2.4.1 上运行。

group_by_month 方法由 groupdate gem 提供

关于这个问题是由什么引起的任何想法? 如果我可以提供任何其他信息,请告诉我。

更新:

我已经找到了问题所在。我没有安装 mysql 时区支持,这导致 groupdate gem 创建错误。最新版本的 gem 无法像以前的版本一样在错误中通知您安装时区支持。

【问题讨论】:

如果 rails 的版本相同,则值得检查您是否仍在使用与以前相同的 ruby​​ 版本。如果两者都相同,那么应该没有像您上面粘贴的那样的新代码错误。 啊,是的,我忘了说我使用的是 ruby​​ 2.4.1,这和我之前使用的一样。这就是让我对这个问题如此困惑的原因 github.com/rails/rails/issues/29507 - 最后一条评论表明 sanitize_sql_array 方法已在 Rails 5.2 中公开。我建议更改 rails 版本以匹配此版本,升级到该版本,然后重试 @MatthewWeeks,如果您将解决方案添加为答案,那就太好了 【参考方案1】:

正如我在原帖中所说:

我已经找到了问题所在。我没有安装mysql时区 支持,这导致 groupdate gem 创建错误。最多 最新版本的 gem 无法在安装错误时通知您 像以前的版本一样支持时区。

【讨论】:

以上是关于用于 ActiveRecord_Relation 的 Rails 未定义方法“sanitize_sql_array”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 中链接原始 SQL 查询或如何从 Rails 中的原始 SQL 查询返回 ActiveRecord_Relation?

获取接收类方法调用的ActiveRecord_Relation

使用ActiveRecord的查询:: QueryMethods并返回ActiveRecord_Relation rails

Rspec 数据库视图为空

第一篇 用于测试使用

python 用于生成车库的唯一编号的脚本,用于文本广告系列。一个脚本用于创建XLS文件,另一个脚本用于单独创建