2014-01-20 82 views
0

所以說我有一個TimeSlot對象,(它應該代表一個採訪時隙),我有一個時間範圍,我想要時間填充。假設我想明天從上午10點到下午5點以30分鐘的時間間隔(即總共14個時隙)填滿時段。基於`datetime`動態創建數據庫對象?

TimeSlot對象具有兩個datetime屬性,一個表示開始時間,另一個表示結束時間。

我想我的應用程序的管理員能夠輸入的兩個datetime的和incrementlength(即30分鐘),我要動態地生成在我的數據庫TimeSlot對象的集合,代表在規定的時間範圍,分成incrementlength分鐘的增量。例如,上述示例生成的時間間隔爲:

上午10點 - 上午10點30分上午10點30分 - 上午11點/等。

我在哪裏可以定義這種方法,我將如何在該方法中創建TimeSlot對象,以及如何讓管理員調用此類方法?對不起,我真的不知道從哪裏開始。謝謝。

回答

1

你應該在模型中定義它,它將是一個類方法,因爲它沒有分配給類的一個對象,而是分配給類本身。我解決了對子級像這樣

def self.create_by_interval(start_time, end_time, intervall) 
    ((end_time.to_i-start_time.to_i)/(intervall*60)).floor.times do |factor| 
    TimeSlot.create(:start => start_time+(factor*intervall).minutes, :end_time => start_time+((factor+1)*intervall).minutes) 
    end 
end 

當你調用to_i上轉換爲UNIX時間戳的日期其所以end_time.to_i-start_time.to_i計算的開始和結束日期之間的secounds。這些秒數根據時間間隔來確定需要多少個對象。 floor方法將Float四捨五入,因爲您無法創建1.99日曆對象;)

我從頭寫這篇文章可能不完美,但它應該明確說明如何完成。

//您需要創建一個提交所需數據的表單。然後,您可以處理接收輸入數據的操作中的數據,該數據位於params?哈希中。你的形式看起來是這樣的:

<%= form_for :date_range, :url => working_path_helper do |f| %> 
    <%= f-label :start_time %><br /> 
    <%= f.text_field :start_time %><br /> 
    <%= f-label :end_time %><br /> 
    <%= f.text_field :end_time %><br /> 
    <%= f-label :intervall %><br /> 
    <%= f.text_field :intervall %><br /> 
    <%= f.submit %> 
<% end %> 

然後在控制器,你需要調用類的方法是這樣的:

TimeSlot.create_by_interval(Time.parse(params[:date_range][:start_time]), Time.parse(params[:date_range][:end_time]), params[:date_range][:intervall]) 

Time.parse方法返回一個時間對象支持算法FMP字符串,因爲你不能傳遞任何東西否則,然後通過HTTP的字符串

+0

非常感謝你!這是有道理的;然而,我怎麼會真的調用這個類的方法?假設我有一個觀點,即只有我的管理員可以訪問;我只是創建一個表單並將表單的輸入設置爲等於類方法的參數?我搜索了網頁,但並沒有真正找到一個這樣做的句法性的明確例子。 –

+0

見編輯,...... – davidb