我正在使用Rails 4和postgresql数据库,我有一个关于在数据库中输入CSV数据集的问题。
Date Advertiser Name Impressions Clicks CPM CPA CPC CTR
10/21/13 Advertiser 1 77 0 4.05 0.00 0.00 0.00
10/21/13 Advertiser 2 10732 23 5.18 0.00 2.42 0.21
10/21/13 Advertiser 3 16941 14 4.64 11.23 5.62 0.08
10/22/13 Advertiser 1 59 0 3.67 0.00 0.00 0.00
10/22/13 Advertiser 2 10130 15 5.24 53.05 3.54 0.15
10/22/13 Advertiser 3 18400 22 4.59 10.55 3.84 0.12
10/23/13 Advertiser 1 77 0 4.06 0.00 0.00 0.00
10/23/13 Advertiser 2 9520 22 5.58 26.58 2.42 0.23
使用上面的数据我需要为每个广告商创建一个展示页面。
最终,我需要有一个广告客户列表,我可以点击其中的任何一个,然后转到他们的展示页面并显示与每个广告客户相关的信息(展示次数,点击次数,cpm等)
我感到困惑的是,当存在包含重复广告客户的行时,如何导入CSV数据,但其他列包含相关和非重复信息。如何设置我的数据库表,以便我不会有重复的广告商并仍然导入然后显示正确的信息?
答案 0 :(得分:1)
您需要创建两个模型:广告商和网站。 (或者约会)。
广告客户“有很多”网站,而网站“有一个”广告客户。此关联将允许您正确导入数据。
请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
答案 1 :(得分:1)
我没有创建两个不同的模型,而是创建了1个广告客户模型,并将完整的数据集输入到该模型中。
require 'csv'
desc "Import advertisers from csv file"
task :import => [:environment] do
CSV.foreach('db/MediaMathPerformanceReport.csv', :headers => true) do |row|
Advertiser.create!(row.to_hash)
end
end
通过上面的rake任务导入数据后,我只需按如下方式设置show route:
def show
@advertiser = Advertiser.where(advertiser_name: advertiser_name)
end