如何让 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
页面传递到我的路由块?或者,如果我解决将用户返回到正确页面的问题的策略是错误的或可以改进的(我不会感到惊讶),请解释。
我很乐意就 put
和 delete
方法的 this program. Other problems I'm trying to solve are 以及如何添加用户帐户(虽然不是从那开始)获得任何更详细的反馈。
在您的代码中,您在@pg_type:
之前忘记了一个“=”
<input type="hidden" name="pg_type" value="<%= @pg_type %>">
出于学习目的,我正在开发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
页面传递到我的路由块?或者,如果我解决将用户返回到正确页面的问题的策略是错误的或可以改进的(我不会感到惊讶),请解释。
我很乐意就 put
和 delete
方法的 this program. Other problems I'm trying to solve are
在您的代码中,您在@pg_type:
之前忘记了一个“=”<input type="hidden" name="pg_type" value="<%= @pg_type %>">