如何让 Sinatra erb 在参数中报告其引用页面

How to get a Sinatra erb to report back its referring page in params

出于学习目的,我正在开发a Ruby/Sinatra "to do list" program。在 views 中,我有一个通常的 index 页面,其中列出了未完成的任务,还有一个 completed 页面。在这两个页面(以及许多未来用户创建的 categories 页面上),有一个类似的 table,具有类似的移动和删除项目的方法。它们调用相同的方法,或者我希望它们调用相同的方法。但是,如果他们调用相同的方法,则在这些方法结束时,用户会 redirect 进入 index 视图。但是,如果用户在 completed 页面上,他们希望在删除项目(或其他内容)后留在该页面上。

要解决这个问题,我想我需要做的是将一个变量从erb文件传递到路由块,报告用户最近的视图(erb文件)在。我以为会有一些内置的 Sinatra 方法来报告这个,我努力寻找(例如,我试过 all plausible-sounding ways of accessing the request object), but I couldn't find any. Then I tried using <input type="hidden" name="pg_type" value="completed"> but for reasons totally mysterious to me, this doesn't work (maybe because 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 页面传递到我的路由块?或者,如果我解决将用户返回到正确页面的问题的策略是错误的或可以改进的(我不会感到惊讶),请解释。

我很乐意就 putdelete 方法的 this program. Other problems I'm trying to solve are 以及如何添加用户帐户(虽然不是从那开始)获得任何更详细的反馈。

在您的代码中,您在@pg_type:

之前忘记了一个“=”
<input type="hidden" name="pg_type" value="<%= @pg_type %>">