2016-12-26 20 views
0

爲了學習目的,我正在開發a Ruby/Sinatra "to do list" program。在views中,我有通常的index頁面,其中列出了未完成的任務,還有一個completed頁面。在這兩個頁面(以及將來用戶創建的許多categories頁面)上,都有一個類似的表格,其中有類似的移動和刪除項目的方法。這些調用相同的方法,或者我希望他們。但是,如果他們調用相同的方法,則在這些方法結束時,用戶將redirect編輯爲index視圖。但是,如果用戶在completed頁面上,他們希望在刪除項目(或其他)後留在該頁面上。如何讓Sinatra erb以params的形式回報其引薦頁面

爲了解決這個問題,我想我需要做的是將一個變量從erb文件傳遞給路由塊,報告用戶最近在哪個視圖(erb文件)。我認爲會有一些內置的Sinatra方法來報告這種情況,而且我看起來很難(例如,我嘗試了all plausible-sounding ways of accessing the request object),但我找不到任何方法。然後我嘗試使用<input type="hidden" name="pg_type" value="completed">,但對於我來說完全神祕的原因,這不起作用(可能是因爲Sinatra uses type="hidden" to route PUT and DELETE requests?)。當我用p params檢查參數時,發現pg_type參數已創建,但其內容是空字符串("")。

從一個示例形式(這是由其他視圖中使用的模板)task_table.erb是這樣的:

<form method="post" action="/delete/<%= task.id %>"> 
    <label for="delete_button"> 
    <input type="hidden" name="pg_type" value="<% @pg_type %>"> 
    <button type="submit" name="delete">Delete</button></label> 
</form> 

下面是該方法的路徑塊:

post('/delete/:id') do 
    store.delete(params[:id].to_i) 
    session[:message] << " " + "Deleted task!" 
    redirect "/" if params[:pg_type] == "index" 
    redirect params[:pg_type] # But params[:pg_type] always == "" :-(
end 

因此,如何能一將我的erb頁面的引薦頁面信息傳遞給我的路由塊?或者,如果我的解決將用戶返回到正確頁面的問題的策略錯誤或可以改進(我不會感到驚訝),請解釋一下。

我想對this program有任何更詳細的反饋意見。我試圖解決的其他問題是how to add unit testsputdelete方法以及如何添加用戶帳戶(不是由那開始的)。

回答

2

在你的代碼@pg_type之前忘了 '=':

<input type="hidden" name="pg_type" value="<%= @pg_type %>"> 
+0

上帝,我_swear_我試圖與擺弄!但是剛纔我在代碼中做了一些改動,它剛開始工作。除了那個小小的等號以外,一切都很完美! – globewalldesk