2012-07-02 68 views
0

沒有其他答案爲我工作。所以這裏去:Rails 3根據相對模型的開始時間和持續時間計算結束時間?

我有一個Event模型和Act模型。每個event has_many acts

每個事件都有一個start_at日期時間和一個end_at日期時間。

這些行爲有一個整數列,我希望能夠通過將該事件的開始時間和行爲持續時間的總和相加來計算該事件的結束時間。這樣一切都是自動計算的,用戶不必輸入結束時間。

我目前正在使用:

------------------------ 
## Events Controller - Create ## 
@event = Event.new(params[:event]) 
@acts = @event.acts 
@acts_total = @acts.sum('duration') 
@event_ending = (@event.start_at + @acts_total.seconds) ##tried .to_datetime here## 
@event.end_at = @event_ending 
if @event.save 
    flash[:notice] = "Your event was created." 
    redirect_to root_path 
------------------------- 
## Events Controller - Show ## 
@event = Event.find(params[:id]) 
@acts = @event.acts 
@acts_total = @acts.sum('duration') 
@event_ending = (@event.start_at + @acts_total.seconds).strftime("%H:%M %p") 
------------------------- 
## Events View - Show ## 
<%= @event_ending %> 

我設法讓我的看法這方面的工作,但是當我創建活動,結束時間被設置爲默認 - 開始時間。

它在視圖中工作,因爲我包含在show動作中的@event_ending邏輯,但是如果我可以用控制器設置它,我可以只顯示事件本身的end_at時間。

我在這裏做錯了什麼?

+0

默認情況下將'end_at'設置爲'start_at'的地方在哪裏? – ABrukish

+0

好吧,我現在知道問題是什麼。我無法從創建操作中的start_at時間生成end_at,因爲在保存之前,該值是零,我假設。我的新解決方法是將該邏輯放入更新操作中,並強制用戶更新它,這恰好適用於我的應用程序。弄清楚如何從創建操作中實現這一點仍然很酷?日期時間很奇怪。 – Louis

+0

如果需要,您可以使用'after_save:on =>:create'回調來爲您的模型設置'end_at' attr,使用'start_at'的已設置值。 – ABrukish

回答

0

試試這個

@event.start_at.to_time + @acts_total.seconds 

你並不真的需要補充.seconds如果它包含秒了。

相關問題