2012-03-10 38 views
0

インデックスメソッドを変更する必要がある、標準のbooks_controllerがあるとします。 params [:value]がnilの場合、not_nil値を割り当ててから同じページをリロードする必要があります。 [:値]が再びゼロである私は、インデックスメソッド内でやっていることはRailsの同じコントローラメソッドにリダイレクト

redirect = params[:value].nil? 
params[:value] ||= some_value_which_is_not_nil 
redirect_to books_path if redirect 

問題はのparamsをリダイレクトした後ということです! params変数をredirect_toメソッドに渡すにはどうすればよいですか、またはこの値を格納する他の方法はありますか?

+0

同じページにリダイレクトする必要はありません。ページが実際にレンダリングされる前にコントローラのアクションが完了するので、最初のリクエストで変数を設定すれば十分です。 –

答えて

0

paramsハッシュはこのようには機能しません。 HTTPはステートレスです。割り当ては要求を超えて持続しません。

これは、要求が行われるたびに要求のGET/POSTパラメータからparamsハッシュが取り込まれることを意味します。同じページにリダイレクトしてそのパラメータを保持する場合は、GETパラメータとして渡す必要があります。

redirect_to books_path(:value => some_value_which_is_not_nil) if redirect 
+0

解決策は何ですか?インスタンス変数? – Sergey

+0

いいえ、リクエスト全体にわたる永続的なデータは、クッキーまたは一部のサーバー側バッキングストアで行われます。この場合、値をパラメータとしてリクエストに追加するだけで済みます。しかし、将来、リクエストからリクエストまでオブジェクト全体を渡したいと思うでしょう。これは面倒です。暗号化されていないCookie(4KBの制限)にオブジェクトを格納するか、ユーザーのセッションをデータベース、Memcache、またはその他のバッキングストアに結びつけることができます。 – kwarrick

+0

さらに明確にするには、アプリケーションへの2つの連続した要求が、アプリケーションの2つの完全に別々の実行インスタンスによってかなり処理される可能性があるという事実を考慮してください。 – kwarrick

0

これが探しているものかどうかは確かではありませんが、パラメータはpathメソッドに渡すことができます。

books_path(:value => 1)の結果は/books?value=1となります。

0
def index 
## RELOAD same page if params value is nil 
params[:value] || redirect_to books_path(:value => "some_value_which_is_not_nil") 
# Do my own processing! 
end 
0

あなたは、なぜあなたは、リロードせずに設定した値で処理を続行できません...それはあなたが再ロードしようとしている同じアクションであるべきものにはnil値を設定している場合は?

アクションをリロードする必要があるとは思えません。

関連する問題