2014-09-29 54 views
0

我對Rails很陌生。我正在嘗試在兩個日期之間找到日期數組,並在創建特定記錄後使用after_create自動執行此操作。試圖迭代Rails 4中兩個日期之間的日期數組

我有模型項目與列project.prep_start和project.prep_end ....都類型日期。

我創建一個項目記錄後,我想找到project.prep_start和project.prep_end之間的日期數組。

最終,我試圖自動創建Event.occurs_on日期列與project.prep_start..project.prep_end數組中的日期相同的許多事件記錄....但首先我必須找到陣列。

我已經寫了這個關注文件...但它一直拋出一個「未定義的方法`每個'爲零:NilClass」錯誤,因爲(我認爲)我沒有創建數組。

我正在嘗試不使用任何寶石,只是做它的完整方式。

我擔心的(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 

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

回答

0

好的......我沒有錯誤地工作。我需要「規定日期」,並使用self.columnname不model.columnname

module AddEvents 
extend ActiveSupport::Concern 

    included do 
    after_save :event_dates, :add_events 
    end 

    def event_dates 
    require 'date'  
    (self.prep_start.to_date .. self.prep_end)  
    end 

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

1

(Date.current...Date.current+1.month).to_a是獲得日期數組一個完美的方法。

你在做什麼在@event_dates.each是調用.each對實例變量`@event_dates' 這需要一個值。

如果您想調用模塊方法event_dates的結果。你必須給prep_startprep_end的值(我認爲他們沒有後,你只打電話.new)。

+0

我把它叫做(event_dates)作爲函數現在,像亞伯拉罕陳上面的代碼,但它始終告訴我「不能從NilClass 」 – NothingToSeeHere 2014-09-30 12:45:58

1

調用函數event_dates不會自動設置實例變量@event_dates。你應該把它作爲一個函數來調用,即沒有@。或者,您可以在event_dates函數中設置實例變量。

我也看到你正在從after_create掛鉤調用event_dates函數。在這種情況下確實沒有必要。

module AddEvents 
    extend ActiveSupport::Concern 

    included do 
    after_create :add_events 
    end 

    def event_dates 
    @project = Project.new 
    @[email protected]_end 
    end 

    def add_events 
    event_dates.each do |event_date| 
     self.events.create!(occurs_on: event_date) 
    end 
    end 
end 
+0

嗯......我用你的代碼,但它一直拋出這個錯誤「不能從NilClass迭代」...我真的被卡住了。 – NothingToSeeHere 2014-09-30 12:44:46

相關問題