学習目的のために、私は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 testsのput
とdelete
の方法と、ユーザーアカウントを追加する方法です。あなたのコードで
神は、私はそれをいじってみました_swear_!しかし、今はちょうど私のコードでその変更を行ったばかりで、それはすぐに働き始めました。そのことを除いて、すべてが完璧でした! – globewalldesk