かなり簡単な問題のための解決策を探していますが、説明がわかりません。列フィルタオプションをビューに追加する方法(「レールの方法」を実行する)
- フォームは新しい要素と
- (will_paginateを使用して)既存の要素のページ分割リストを入力する:
は、私が現在持っているどのような(ワーキング)が含まれ、インデックス図です。
私はデータの一部のみに興味がありますので、フィルタオプション付きのフォームを追加しようとしています。フォームコンテンツをクッキーに保存したいと思います。データベースに格納されているユーザーオブジェクトですが、ユーザーはまだいません)。私が理解できないことは、クッキーに格納されたフォームから値を取得する方法(およびその逆)とwill_paginatedと一緒に使用する方法です。
私は現在、コントローラに@filterオブジェクトを作成し、このオブジェクトのフィルタフォームを追加して、インデックスオプションを再度使用するようにフォームオプションを設定します。これにより、paramsハッシュで指定されたフィルタパラメータが(URLに表示される)インデックスコントローラに渡されます。しかし、この解決策にはいくつかの欠点がある。最初に、ビューを変更する(たとえば、新しい要素を作成する)とすぐにフィルタがなくなり、2番目に@filterオブジェクトがクッキーになるはずです。ここで
は私が持っているコードは、これまでです:
ビュー部分フィルタ用:
<%= form_for(@filter, :url => {:action => "index"}, :html => {:method => :get}) do |f| %>
<div class="field">
<%= f.label :german %><br />
<%= f.check_box :german %>
</div>
<div class="actions">
<%= f.submit "Filter" %>
</div>
<% end %>
コントローラー:
def index
@word = Word.new
@filter = Word.new(params[:word])
@words = Word.paginate(:page => params[:page]).order('word')
# ....
誰も私を助けることができますか?そのような機能(フィルタリング結果)は他のアプリケーションでどのように行われますか?
"フィルタ"とは、データベースのレコードの一部ではなく全てを必要としているということですか?最初は、あなたがほんの一部のコラムを望むということを意味していたと思いました。最初の場合は 'where'句を使います。たとえば、' Word.where( "language =?"、params [:language]) 'のようにします。 –
はい、レコードをフィルタリングしたいと思います。 – theldoria
あなたのヒントはちょっと助けになりました。チェックボックスには次の行があります: '@words = Word.paginate(:page => params [:page])。order( 'word')。ドイツ語=? "、params [:word] [:german]!=" 0 ")'。声明の順序が重要かどうか(例:パフォーマンス)私が理解する限り、これはそうではありません。 – theldoria