2012-05-19 35 views
2

我正在導入一個CSV完整的等候名單註冊到我的數據庫與以前創建的日期,我怎麼可以導入他們,同時保持他們的初始日期與讓他們都顯示相同的日期導入?如何在導入CSV時覆蓋模型中的created_at字段?

我得到的錯誤:Rails can't mass-assign protected attributes for id, created_at

代碼:

csv_file = params[:csv][:file].read 
    csv = CSV.parse(csv_file, :headers => false) 
    csv.each do |row| 
     Model.create!(:email => row[0], :created_at => row[1])  
    end  

回答

5

您需要將所需的列添加到attr_accessible

class Tutorial < ActiveRecord::Base 
    attr_accessible :created_at 
end 
+0

工作過,謝謝! – patrick

+0

只要一定要檢查大規模分配漏洞,[這裏](http://launchware.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1)是一個好帖子 – rogeliog

+8

由於Rails 4更改爲通過控制器而不是模型控制訪問,因此此答案已過時。我們不再使用attr_accesible和(!)它應該「只是工作」 – Ghoti

10

在Rails 4:

attr_accessible不再使用,包括它模型的頂部可能會破壞您的代碼。僅包括:created_at在參數create!應該這樣做。

將@ Ghoti的評論轉換爲答案,讓它更具可見性

+0

已確認 - 只需將'created_at'作爲參數添加到Rails 4即可。 –