【发布时间】:2016-12-26 17:36:37
【问题描述】:
出于学习目的,我正在开发a Ruby/Sinatra "to do list" program。在views 中,我有一个通常的index 页面,其中列出了未完成的任务,还有一个completed 页面。在这两个页面上(以及许多未来用户创建的categories 页面上),都有一个类似的表格,具有用于移动和删除项目的类似方法。这些调用相同的方法,或者我希望它们调用。但如果他们调用相同的方法,则在这些方法结束时,用户将redirected 到index 视图。但如果用户在 completed 页面上,他们希望在删除项目(或其他内容)后留在该页面上。
为了解决这个问题,我认为我需要做的是将一个变量从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 方法以及如何添加用户帐户(虽然不是从那个开始)。
【问题讨论】:
标签: ruby parameters sinatra erb