2016-12-26 5 views
0

学習目的のために、私はa Ruby/Sinatra "to do list" programを開発中です。 viewsには、通常のindexページがあり、完了していないタスクと、completedページが表示されています。両方のページ(および今後多くのユーザーが作成したcategoriesページ)にも同様のテーブルがあり、同様の方法でアイテムを移動および削除できます。これらは同じメソッドを呼び出すか、私はそれらを望みます。しかし、彼らが同じメソッドを呼び出す場合、それらのメソッドの最後では、ユーザはindexビューにredirectです。しかし、ユーザーがcompletedページにいる場合は、アイテムを削除した後にそのページにとどまりたいと思っています。Sinatra erbに参照ページをパラメータで報告する方法

この問題を解決するには、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の方法と、ユーザーアカウントを追加する方法です。あなたのコードで

答えて

2

あなたは@pg_type前に '=' を忘れてしまった:

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

神は、私はそれをいじってみました_swear_!しかし、今はちょうど私のコードでその変更を行ったばかりで、それはすぐに働き始めました。そのことを除いて、すべてが完璧でした! – globewalldesk

関連する問題