Rails4.2升级到5.0.1后where_values报错,如何用where_clause实现相同功能
Rails 5 替换
where_values方法解决方案 问题背景
Rails 5 版本正式移除了ActiveRecord查询接口的where_values方法,因此从Rails 4.x版本升级后,原有调用该方法的代码会抛出NoMethodError - undefined method 'where_values' for异常。
替换方案
使用Rails 5新增的where_clause接口即可实现完全同等的功能,where_clause返回ActiveRecord::Relation::WhereClause对象,其中存储了所有查询条件的相关信息。
原报错代码
PlacementActivityStep.where(query_values_hash[:query_string], query_values_hash[:values]).where_values.select{|x| x.present?}
修改后兼容代码
PlacementActivityStep.where(query_values_hash[:query_string], query_values_hash[:values]).where_clause.send(:predicates).select{|x| x.present?}
补充说明
where_clause的私有属性predicates存储的内容和Rails 4中where_values返回的条件数组完全一致,可直接沿用原有过滤逻辑- 若你需要直接获取拼接好的where条件SQL字符串,可直接调用
where_clause.to_sql,无需再手动拼接条件数组
内容的提问来源于stack exchange,提问作者namrata agarwal
相关产品推荐
相关产品推荐

