For learning purposes, I am developing a Ruby/Sinatra "to do list" program. In
views, I have the usual
index page, which lists uncompleted tasks, and also a
completed page. On both pages (and on many future user-created
categories pages), there is a similar table, with similar methods for moving and deleting items. These call the same methods, or I'd like them to. But if they call the same methods, at the end of those methods the user is
redirected to the
index view. But if users are on the
completed page, they want to stay on that page after deleting an item (or whatever).
To solve this problem, I think what I need to do is pass a variable from the
erb file to the route block, reporting what view (
erb file) the user was most recently on. I thought there would be some built-in Sinatra methods to report this, and I looked hard (e.g., I tried 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
DELETE requests?). When I inspect the parameters with
p params, I see that the
pg_type param was created, but its content is an empty string (
An example form from (this is a template used by the other views)
task_table.erb is this:
<form method="post" action="/delete/<%= task.id %>">
<input type="hidden" name="pg_type" value="<% @pg_type %>">
<button type="submit" name="delete">Delete</button></label>
Here is the route block for that method:
session[:message] << " " + "Deleted task!"
redirect "/" if params[:pg_type] == "index"
redirect params[:pg_type] # But params[:pg_type] always == "" :-(
So how can a pass info about the referring page from my
erb pages to my route blocks? Or, if my strategy for solving the problem of returning the user to the correct page is wrong or could be improved (I wouldn't be surprised), please explain.
I'd love to have any more detailed feedback on this program. Other problems I'm trying to solve are how to add unit tests of
delete methods and how to add user accounts (not started with that though).