2013-04-04 50 views
-2

我從db中選擇了事件。 我需要克隆每個元素30次,並設置elem.shedule不同的日期(每天在當前月-2013-04-01 .. 2013-04-30)。無法添加修改過的元素到Ruby中的數組中

這是我的代碼(「shedule」字段是日期):

daily_events = Events.All 
repeated_events = [] 
for event in(daily_events) 
    for day in(1..date.end_of_month.day) 
    repeat_event = event 
    repeat_event.shedule = Date.new(date.year, date.month, day) 
    repeated_events << repeat_event 
    end 
end 

但作爲結果我有每個ELEM無處不在30次同上個月一天日期(2013年4月30日)

如何解決它?

如果我設置的repeated_events+=repeat_event代替repeated_events << repeat_event 我有類型錯誤在EventsController#指數 不能轉換事件到陣列(事件#to_ary給NilClass)

我想是因爲我克隆只是元素的引用,而不是元素的內容。什麼是解決它的方法?

+0

你得到的輸出顯示在這裏,說出你想要的樣子是什麼?這將有助於快速解決 – 2013-04-04 14:46:35

+0

如果我設置DR + = repeat_event代替dr.push(repeat_event) 我有類型錯誤在EventsController#指數 不能轉換事件到陣列(事件#to_ary給NilClass) – Gabi 2013-04-04 14:49:10

+0

我需要有在新陣列'博士'相同的對象,但具有不同的日期(2013-04-01 .. 2013-04-30)。但我有30個同日期的對象(2013-04-30) – Gabi 2013-04-04 14:51:24

回答

0

我想通了,我需要深拷貝和使用元帥模塊

所以我的解決辦法是

repeat_event = Marshal.load(Marshal.dump(every_day_event)) 

謝謝對全部!

1

每次通過內循環時,repeat_event是對同一個event對象的引用。您的數組最終會存儲對該單個對象的許多引用,因此當您將作業分配到repeat_event.shedule時,它會影響它們全部。

嘗試使用dup進行復制,像這樣:

repeat_event = event.dup 
+0

我試圖做到這一點,但現在得到奇怪的錯誤路由錯誤 沒有路由匹配{:action =>「edit」,:controller =>「events」,:id =>#} 嘗試運行耙路線以獲取有關可用路線的更多信息。 – Gabi 2013-04-04 15:20:56