ActiveRecord::Base没有#sanitize方法的定义。

13

我刚刚升级到Rails 5.1.1,但出现了这个错误。

NoMethodError (undefined method `sanitize' for ActiveRecord::Base:Class):

堆栈跟踪追溯到这段代码

like_search_term = ActiveRecord::Base::sanitize("%#{escaped_search_term}%")

这个方法在新的Rails升级版中被删除或更改了吗?


看起来它在模型中不起作用,但在视图中可以,我尝试了Rails 4.2。 - simo
你可以检查一下这个答案,它对我有用。https://dev59.com/sW865IYBdhLWcg3wHKpe#6077253 - Salma Gomaa
2个回答

15

5
谢谢提供信息。最终我选择使用 'ActiveRecord::Base.connection.quote' 作为替代品,这修复了我的测试套件。有人知道更好的做法吗? - William Holt
1
然而,当我尝试使用query_string = ActiveRecord::Sanitization.sanitize_sql(params[:q])时,我得到了NoMethodError: undefined method `sanitize_sql' for ActiveRecord::Sanitization:Module的错误提示。 - Surya
也许我对问题的理解有误,但是ActiveRecord::Base.sanitize(params[:q])仍然正常工作,没有任何错误。 - Surya
@Surya:它后来被移除了。 - Sergio Tulentsev
1
或许在后续版本中也引入了sanitize_sql。谢谢。 - Surya
显示剩余3条评论

0

如果您在模型的上下文中使用它们,仍然可以使用清理方法。例如,您可以将以下内容添加到您的模型:

def self.where_ilike(search_terms)
  where('search_tokens ILIKE ?', "%#{sanitize_sql_like(search_terms)}%")
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接