2013-04-04 44 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