2016-11-05 8 views
1

いくつかのタブ、ラジオボタン、ドロップボックスなどでモデルの検索フォームを作成しています。検索と並べ替えにはindexアクションを使用します。検索のためのパラメータはparamsに保持されます。私は同じindexビューにとどまりながら動作します。しかし、他のページにアクセスして再度ページを検索する必要が生じた場合、paramsは機能せず、状態は維持されません。Ruby-on-rails:セッションを使用する以外は、ページのステートフルを行う他の方法はありますか?

私はセッションでそれを行うことができますが、私は別のモデルのためのより多くの検索フォームを持っていると仮定し、そのすべてのパラメータはセッションに入ります。セッションが乱雑になりませんか?

そこで質問です:ページの状態を保持するために、他の合理的な方法は、 あります(私はデータベースに入れたくない)

答えて

1

ActiveRecordのデータベースインターフェイスとよく似た、データの入出力を管理するためのクラスがあると考えられます。このデータをセッションに保存することもできますし、memcacheやredisサーバーを使用する方が良いでしょう。ここに例があります。

class SearchParam 

    def initialize(id, model, query_string = nil) 
    @id = id 
    @model = model 
    @query_string = query_string 
    end 

    def save 
    # write @query_string to redis using `key` 
    end 

    def self.find(id, model) 
    instance = new(id, model) 
    instance.query_string = Redis.get(instance.key) 
    return instance 
    end 

    def query_string 
    @query_string 
    end 

    def query_string=(qstring) 
    @query_string=qstring 
    end 

    def key 
    "#{@id}-#{model}" 
    end 

end 

私は正確なredisコマンドと構文を忘れていますが、これまでに作業したことがあれば基本的な書き込みと読み込みができます。 Memcacheまたはセッションも機能します。次に、ユーザー/モデルのコンボのクエリ文字列のハッシュ表現を簡単に保存し、検索フォームで使用する検索パラメータを設定できます。

簡単に彼らが最初に(提出一切のparamsが存在しない場合)、インデックスページへ

@search_params = SearchParam.find(session.id, model).query_string 

を取得したり、あなたがに基づいて結果を返すときに、新しいQUERY_STRINGを保存する際にコントローラでセッションIDに基づいて検索しますインデックスアクションでフォームを送信する

SearchParam.new(session.id, model, params).save 
1

ありのlocalStorage(https://developer.mozilla.org/en/docs/Web/API/Window/localStorage)は、ブラウザでも利用可能ですが、あなたが持っていますJSを使用してアクセスします。

それ以外の場合は、数十種類の検索フォームがない限り、セッションに保存することは大丈夫だと思います。

関連する問題