2

Ruby と Rails は初めてです。

私は簡単なアプリケーションを作成しました。インデックス ページには、製造元、モデル、タイプ (スポーツカー、SUV、高級車) の列を含む Cars テーブルが表示されます。

列ヘッダーをクリックして、その列で並べ替えることができるようにしました

また、表の上にフォームを追加し、ユーザーがボックスをオン/オフして「送信」をクリックすると、チェックされたタイプの車のみが表に表示されるように、各車のタイプのチェックボックスを追加しました。

私ができるようにしたいのは、いくつかの列で並べ替えてから、いくつかのボックスをチェック/送信をクリックして、並べ替えられたリストとフィルタリングされた結果を表示することです。

現時点では、並べ替えまたはフィルター処理を行うことができますが、1 つのアクションを実行すると、アプリケーションは前のアクションを忘れてしまいます。

これを行うRESTfulな方法は何ですか?

セッションハッシュに「設定」を保持し、ユーザーが新しい HTTP リクエストを作成するたびに、そこから URI を作成する必要がありますか?

4

2 に答える 2

1

リクエストURIにソート/フィルターパラメーターを含めることの何が問題になっていますか?たとえば、「ホンダ」のメーカーのフィルタフォームを送信すると、URIはのようになります/cars?filter[make]=honda。並べ替えオプションも含めると、URIはになります/cars?filter[make]=honda&sort_by=make

コントローラ内では、paramsハッシュを介してこれらにアクセスできます。

class CarsController < ApplicationController
  def index
    @filter = params[:filter]  || {}
    @order  = params[:sort_by] || "created_at"

    @cars = Car.where(@filter).order(@order)
  end
end

ビューのパスヘルパーにパラメータを含めることで、これらのURIを生成できます。

link_to "Only show hondas", cars_path(:sort_by => @order, :filter => {:make => "honda"})
link_to "Sort by year",     cars_path(:sort_by => :year,  :filter => @filter)

このように、@ filterと@orderは、明示的に変更しない限り、リクエスト間で「永続化」されます。(これらのリンクはDRYではありません...動的に生成する必要があります)。

于 2013-02-17T07:49:02.317 に答える
0

セッションハッシュに保持されているデータは、ユーザーがログインしている限り利用できます。現在のURIが何であるかは関係ありません。paramsハッシュを使用したい場合にのみ、URIをハックする必要があります。

したがって、session[:sortBy] = :makeソートアクションが選択されるたびに次のようなことを行う必要があります。次に、コントローラーで現在アクセスparams[:sortBy]している場所で、代わりにプルしますsession[:sortBy]

もちろん、私はあなたのシンボルがどのように見えるかについて推測しています。独自のコードの一部を表示できるようにしておくと役立ちます。

于 2013-02-17T06:26:07.253 に答える