所有
我正在使用Ruby-on-Rails框架开发一个项目。该项目最初基于Rails 4.0.9。我做了一个Brakeman Vulnerability Scan,我得到了" Medium"级别问题报告4.0.9容易发生DoS攻击,因此我升级到4.2.3。
但升级后,我首先收到有关" tzinfo "的错误消息。未找到数据源,因此我将 tzinfo-data gem包含在平台规范中。完成后,每当我对查询结果进行方法调用时,使用ActiveRecord模型的数据库查询就会失败。
CODE:
query = ['SELECT id, firstname, lastname, status, code FROM giftcard_orders WHERE phone = ? AND description LIKE ? ', phone, '%'+search]
@users = User.find_by_sql(query)
if @users.count > 0
@users.each do |user|
user[:code] = user[:code].do_decrypt
end
end
但是在find_by_sql之后,我得到了一些错误,如下所示:
在685ms内完成500内部服务器错误(ActiveRecord:0.0ms)
*
NoMethodError (undefined method `type' for "int identity(10)":String):
activerecord (4.2.3) lib/active_record/attribute_methods/time_zone_conversion.rb:64:in `create_time_zone_conversion_attribute?'
activerecord (4.2.3) lib/active_record/attribute_methods/time_zone_conversion.rb:53:in `inherited'
org/jruby/RubyProc.java:290:in `call'
org/jruby/RubyProc.java:271:in `call'
activerecord (4.2.3) lib/active_record/attribute_decorators.rb:61:in `matching'
org/jruby/RubyArray.java:2468:in `select'
activerecord (4.2.3) lib/active_record/attribute_decorators.rb:60:in `matching'
activerecord (4.2.3) lib/active_record/attribute_decorators.rb:56:in `decorators_for'
activerecord (4.2.3) lib/active_record/attribute_decorators.rb:47:in `apply'
activerecord (4.2.3) lib/active_record/attribute_decorators.rb:29:in `add_user_provided_columns'
org/jruby/RubyArray.java:2399:in `collect'
org/jruby/RubyArray.java:2412:in `map'
activerecord (4.2.3) lib/active_record/attribute_decorators.rb:28:in `add_user_provided_columns'
activerecord (4.2.3) lib/active_record/attributes.rb:93:in `columns'
activerecord (4.2.3) lib/active_record/attributes.rb:98:in `columns_hash'
C:0:in `columns_hash'
activerecord (4.2.3) lib/active_record/relation/query_methods.rb:1067:in `arel_columns'
org/jruby/RubyArray.java:2399:in `collect'
org/jruby/RubyArray.java:2412:in `map'
activerecord (4.2.3) lib/active_record/relation/query_methods.rb:1066:in `arel_columns'
activerecord (4.2.3) lib/active_record/relation/query_methods.rb:1059:in `build_select'
activerecord (4.2.3) lib/active_record/relation/query_methods.rb:878:in `build_arel'
activerecord (4.2.3) lib/active_record/relation/query_methods.rb:858:in `arel'
activerecord (4.2.3) lib/active_record/relation/calculations.rb:210:in `perform_calculation'
activerecord (4.2.3) lib/active_record/relation/calculations.rb:127:in `calculate'
activerecord (4.2.3) lib/active_record/relation/calculations.rb:42:in `count'
activerecord (4.2.3) lib/active_record/relation.rb:268:in `empty?'
activerecord (4.2.3) lib/active_record/relation.rb:278:in `any?'
*
答案 0 :(得分:0)
此Rails版本已弃用方法ActiveRecord::Querying.find_by_sql
:
http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class
您应该使用select id FROM giftcard_orders
作为替代方案。
http://apidock.com/rails/ActiveRecord/Querying/find_by_sql
我不确定你的错误,但我建议你:
查看简单查询示例会发生什么,例如ActiveRecord::Querying.find_by_sql(['select id FROM giftcard_orders'])
,
直接使用模块:
$> bundle open activerecord
如果这不起作用,请尝试检查是否调用了find_by_sql方法。小心这个:
lib/activerecord/querying.rb
转到CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> cQuery = builder.createQuery(Long.class);
Root<Item> from = cQuery.from(Item.class);
CriteriaQuery<Long> select = cQuery.select(builder.count(from));
然后放一些东西向您展示真正使用它(可能是轨道记录器或撬具)
https://github.com/rails/rails/blob/v4.2.3/activerecord/lib/active_record/querying.rb
如果您怀疑是ActiveRecord错误,请在github Rails存储库中打开一个问题: