我正在寻找对以下具有活动记录的查询结果的解释:
date_range = (Date.today - 7)..(Time.now.to_datetime)
r = Report.find(:all, :conditions => {:created_at => date_range},
:group => 'date(created_at)',
:select => 'date(created_at) as day, count(id) as counter') 基本上,我只是在表"reports“中计算结果,但是我得到了命名字段”计数器“的不同类型的值,双引号的数组与仅为数字的数组。
MySQL
如果使用MySQL,
r.map(&:counter)返回:
=> "3“、"3”、"5“、"4”、"4"
SQLite
如果使用SQLite,
r.map(&:counter)返回:
=> 3,3,5,4,4
MySQL用引号(String)和SQLite数返回数字是正确的吗?我希望这两个都只返回整数。还是我缺少了一些MySQL侧的配置?
编辑:
以防万一,使用普通迁移创建的两个DB,因此所有字段都是等效类型。
发布于 2011-03-01 14:12:57
这是SQLite ActiveRecord适配器中的一个bug。
当您使用"SELECT expr col_name“合成新列值时,col_name将转换为字符串,而不是正确的数据类型(在本例中为int)。
参见相关的Rails bug票证:https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4544-rails3-activerecord-sqlite3-lost-column-type-when-using-views#ticket-4544-2
显然,SQLite不能为视图返回正确的列类型值,这是在合成这样的属性时使用的机制。
发布于 2014-04-23 22:25:28
使用底层连接来执行我的SQL语句,我也遇到了同样的问题。
但是,我注意到,如果您在exec_sql语句中使用绑定,数据类型将如预期的那样返回。
例如。
ActiveRecord::Base.connection.exec_sql("select * from users where id = 35") 结果:
ActiveRecord::结果:0x7fa2c6ede200 @columns="id“、"name”、@hash_rows=nil、@rows=["35“、"FOO"]
然而,
ActiveRecord::Base.connection.exec_sql("select * from users where id = ?", nil, [[nil,35]]) 结果:
ActiveRecord::结果:0x7fa2c6ede200 @columns="id“、"name”、@hash_rows=nil、@rows=[35,"FOO"]
注意,35的数据类型是整数!希望这能有所帮助。
https://stackoverflow.com/questions/5150498
复制相似问题