用于 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