我的数据库中有以下表格:
class CreateGoogleRecords < ActiveRecord::Migration
def change
create_table :google_records do |t|
t.string :user_id
t.string :date
t.text :stats
t.string :account_name
t.integer :total_conversions
t.decimal :total_cost
t.timestamps
end
end
end
我希望在视图中创建一个表,按月将记录组合在一起(我不能使用&#34;创建日期,因为有时它们是从API中批量删除的)。
涉及很多遗留代码,而不是将列转换为datetime我希望我可以在执行查询时将日期字符串转换为datetime对象。
我尝试过编写范围如下:
scope :stats_for_reports, ->(start_date, end_date, user_ids) { select('user_id, sum(total_cost) as total_cost, sum(total_conversions) as total_conversions')
.where('date >= ? and date <= ?', start_date, end_date)
.where(user_id: user_ids)
.group(DateTime.parse(:date).month.to_s)}
但我收到TypeError: can't convert Symbol into String
错误。
在控制台中,我一直在尝试这样的事情:
GoogleRecord.where(date: date_start..date_end).group{ |m| DateTime.parse(m.date).month }
或
GoogleRecord.where(date: date_start..date_end).group(:date).to_date
我是否正确地选择其中任何一个?
答案 0 :(得分:0)
您是否考虑过使用ActiveRecord before_save,after_save,after_initialize?您可以创建一个DateWrapper(非常类似于下面的EncryptionWrapper),并将字符串转换为对其余代码透明的日期。
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html