2015-09-11 19 views
1

我是Rails和Ruby的新手,仍然圍繞着Rails的洞概念。我在哪裏可以保存一個變量,當我刷新頁面時,不應該被覆蓋

我想要做什麼: 我創建了一週的換檔計劃,並且想要創建一個顯示下一個/最後一週的按鈕。

我做了什麼:

我有3個相關的表。移動,人員和測試(包含班次類型) 測試和人員都與Shift有一對多關係。

在我的控制,我做了以下內容:

def index 
    @todos = Todo.all 
    @shifts = Shift.all 
    @people = Person.all 

    @start_of_week = Date.new(2015,8,7) 
    @end_of_week = Date.new(2015,8,11) 

觀點:

<% person.shifts.where(:date_of_shift => @[email protected]_of_week).order(:date_of_shift).each do |shift| %> 
    <td> 
     <%="#{shift.test.name} #{shift.date_of_shift}"%> 
    </td> 
<%end%> 

我的想法是我會做一個鏈接,我會增加這兩個日期,並刷新我的網頁

<a href="/todos/new"> 
    Next Week 
    <% @start_of_week += 7 %> 
    <% @end_of_week += 7 %> 
</a> 

不幸的是,這是行不通的。因爲每次我在我的控制器中調用索引函數時,都會將日期設置爲默認值。

而我很笨,如何以軌道方式解決這個問題。 我只會以某種方式將日期作爲參數傳遞給索引函數或類似的東西。

一般結構是: 我搭建了一個Todo視圖/控制器/數據庫,只是爲了擁有視圖/控制器和我的3個表。

Thx尋求幫助。 PS:我正在使用當前版本的rubunt和rails on lubuntu15(不應該是真正相關的^^)

+0

這與尋呼無異,後者通常會向服務器發送頁碼。在你的情況下,像日期和你拉的那一天,或日期範圍,或其他什麼的一週。 –

+0

這正是我所期待的。我必須通過params將數據發送回控制器 – Elux91

回答

0

控制器方法將在每次有人loads頁面被調用。如果你想暫時存儲數據,你應該查看cookies(通常會話更容易使用,但在你的情況下,讓客戶也可以改變數據,點擊後退/前進按鈕,你不想有每個小交互的HTTP請求,對吧?)。你可以找到相關的文檔here

使用變量可以是這樣的:

# in the controller 
cookies[:start_of_week] ||= Date.new(2015,8,7) 

# in the view 
cookies[:start_of_week] 

也許你想用一個整數,而不是一個日期對象在這裏如果你打算使用它在客戶端的工作,但你必須在你的意見中考慮到這一點。

編輯:在重讀您的問題時,我意識到我的答案沒有解決幾件事情。

爲什麼你嘗試的代碼不工作?

<a href="/todos/new"> 
    Next Week 
    <% @start_of_week += 7 %> 
    <% @end_of_week += 7 %> 
</a> 

當寫你要知道,這將在服務器端進行評估,然後(在這種情況下,網絡瀏覽器)被髮送到客戶端的意見。在頁面呈現時但不晚於時,您會增加實例值@start_of_week@end_of_week

所以要麼你有鏈接去你的控制器中的一個特殊的動作,將處理新的值設置cookie /會話變量(以後只有在這種情況下一個選項)並呈現一個新的頁面並將其發回給用戶你使用Javascript並在客戶端執行此操作,並更改cookie以便不必進行任何不必要的附加請求(但是之後考慮它,您可能最需要從服務器加載數據,因此它可能會沒有任何區別你採取了什麼)。

+2

使用cookies/session將數據存儲爲高度瞬態的數據,因此它不是最理想的。人們應該通過查詢字符串發送它們。 –

相關問題