【问题标题】:How to get a Sinatra erb to report back its referring page in params如何让 Sinatra erb 在参数中报告其引用页面
【发布时间】: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 testsputdelete 方法以及如何添加用户帐户(虽然不是从那个开始)。

【问题讨论】:

    标签: ruby parameters sinatra erb


    【解决方案1】:

    在您的代码中,您在@pg_type 之前忘记了一个“=”:

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

    【讨论】:

    • 上帝,我发誓我试着摆弄那个!但就在刚才,我在我的代码中进行了 one 更改,它才开始工作。一切都很完美,除了那个该死的小等号!
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多