0

我有兩個模型,Project和Event。項目has_many事件。如何在Rails 4中從一系列日期創建多個記錄

我想自動創建一個Project的after_create事件。

我的項目模型有兩個日期列prep_start和prep_end

我試圖找到prep_start之間的日期的數組,prep_end

我已經創建了一個應該關注的問題自動創建事件after_create新@項目。我的關注(Add_Events.erb)文件如下所示:

module AddEvents 
extend ActiveSupport::Concern 

    included do 
    after_create :event_dates, :add_events 
    end 

    def event_dates 
     @project = Project.new 

    (@[email protected]_end) 
    end 
    end 

    def add_events 

    @event_dates.each do |event_date| 
    self.events.create!(occurs_on: event_date) 
    end 
    end 

我無法獲取數組。

回答

1

我假設你想每天創建活動,對吧?首先,您需要查找開始日期和結束日期之間的日期數組。有一個非常好的紅寶石可以幫助你做到這一點here: IceCube

一旦你有你的日期排列,你可以通過他們循環,並創建活動:

def create_events 
    # Assuming you have @event_dates = ["2014-09-20", "2014-09-21", "2014-09-22", "2014-09-23"] 
    @event_dates.each do |event_date| 
    self.events.create!(event_date: event_date) 
    end 
end 
+0

謝謝(抱歉,我在一週工作...長的回覆時間)。我試圖不使用太多的寶石,所以我更新了我的問題,以反映我如何在project.prep_start和project.prep_end之間找到日期數組。感謝您的幫助......我仍在工作。 – NothingToSeeHere 2014-09-29 15:22:52

1

紅寶石範圍(X .. Y)是可枚舉的對象,這意味着你可以在他們做。每。

迭代日期範圍可以正常工作,但迭代一系列日期時間會在範圍的開始和結束之間產生每秒。 (它也會發出很多警告,因爲datetime上的succ方法已過時)

因此,您必須確保您的項目類型爲Date。

它是安全地調用TO_DATE日期,時間,日期和TimeWithZone的情況下,下面的例子應該做的伎倆

(project.start_at.to_date .. project.end_at.to_date).each do |date| 
    Event.create(:occurs_at => date) 
end 
+0

謝謝!我無法在我的關注文件中使陣列工作。它每次都會爲「nil:NilClass」拋出一個「未定義的方法」錯誤。這不是你的代碼,這可能是我對這兩個答案的補救。我很新...所以我花了一些時間試圖找出你的代碼放在哪裏。 。再次感謝。 – NothingToSeeHere 2014-09-29 15:30:52

相關問題