我刚刚升级到Rails 5.1.1,但出现了这个错误。
NoMethodError (undefined method `sanitize' for ActiveRecord::Base:Class):
堆栈跟踪追溯到这段代码
like_search_term = ActiveRecord::Base::sanitize("%#{escaped_search_term}%")
这个方法在新的Rails升级版中被删除或更改了吗?
我刚刚升级到Rails 5.1.1,但出现了这个错误。
NoMethodError (undefined method `sanitize' for ActiveRecord::Base:Class):
堆栈跟踪追溯到这段代码
like_search_term = ActiveRecord::Base::sanitize("%#{escaped_search_term}%")
这个方法在新的Rails升级版中被删除或更改了吗?
是的,的确,看起来它已经被移除了。
Sanitize从未成为框架的公共API的一部分。由于我们在框架中不再需要它,因此我们将其删除了。建议的方法是使用公共API对原始SQL进行清理,以便在执行语句中使用。http://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html
如果您在模型的上下文中使用它们,仍然可以使用清理方法。例如,您可以将以下内容添加到您的模型:
def self.where_ilike(search_terms)
where('search_tokens ILIKE ?', "%#{sanitize_sql_like(search_terms)}%")
end