-2

私はデータベースからイベントを選択しています。各要素を 30 回複製し、elem.shedule に異なる日付を設定する必要があります (現在の月 -2013-04-01 .. 2013-04-30 の毎日)。

それは私のコードです(「スケジュール」フィールドは日付です):

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-04-30) で持っています。

修正方法は?

EventsController#index で TypeErrorを設定repeated_events+=repeat_eventする代わりに設定するとrepeated_events << repeat_event 、Event を配列に変換できません (Event#to_ary は NilClass を返します)

要素の内容ではなく、要素への参照だけを複製しているためだと思います。それを修正する方法は何ですか?

4

2 に答える 2

0

ディープコピーが必要であり、マーシャルモジュールを使用することがわかりました

だから私の解決策は

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

全てに感謝!

于 2013-04-04T15:29:40.000 に答える