爲了學習目的,我正在開發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 tests的put
和delete
方法以及如何添加用戶帳戶(不是由那開始的)。
上帝,我_swear_我試圖與擺弄!但是剛纔我在代碼中做了一些改動,它剛開始工作。除了那個小小的等號以外,一切都很完美! – globewalldesk