私はPost
のリストを管理するコントローラを持っており、それにフィルタを追加しました。投稿はrating
システム(0-5評価)です。このフィルタを使用すると、ユーザーは表示するレーティングを入力でき、入力されたレーティング以上が表示されます。ページ更新時にRailsコントローラの変数を更新するにはどうしたらいいですか?
たとえば、10件の投稿があり、7件が3.5以上の評価を受けています。ユーザが評価フィルタに3.5
を入力した場合、対応する評価の7つの投稿のみが表示されます。ここで
コードされています
index.html.erb
...
<%= form_tag posts_path, method: :get, class: "form-inline" do %> <!-- form_tag on posts path (index), use get method since we are displaying results and not altering/ submitting new data -->
<div class="rating form-group">
<%= label_tag :rating %>
<%= number_field_tag :rating, params[:rating], step: 0.5, min: 0, max: 5, class: "form-control" %>
<%= submit_tag "Search", name: nil, class: "btn btn-primary"%>
</div>
<% end %>
...
ここでは私のインデックスです:
def index
@posts = Post.all
@posts = Post.where("rating >= ?", params["rating"]) if params["rating"].present?
end
私の問題は、私は、ユーザーがいつでも彼らのフィルタを削除しやすさを提供したい、ですページをリフレッシュします。ユーザーがページをリフレッシュするたびにフィルタを削除して10の投稿をすべて表示するにはどうすればよいですか?今すぐフィルタを作成した後で10個の投稿をすべて表示したい場合は、フィールドボックスに移動して番号3.5
を削除してからフォームを再送信するか、手動でURLを変更する必要があります。 http://localhost:3000/posts?utf8...&rating=3
〜http://localhost:3000/posts
に;ユーザーがページを更新するほうが便利だと思います。
私はこれを言い換えることができますが、ユーザーがページを更新するときにコントローラを@posts = Post.where...
から@posts = Post.all
に変更するにはどうすればいいですか?
。あなたが条件付きであなたのURLを変更することがあまりにも創造的な場合、あなたは沼地の州の管理領域に入る。簡単な回避策:「フィルタをクリア」ボタンを追加するのはどうですか? 'rating'パラメータなしでフィルタフォームを送信するだけです。 – anyarms
@Iggy、あなたのフォームを投稿リクエストに変更する必要があるため、私は自分の答えを削除しました。あなたはそれを入手する必要がありますか? – chester
@チェスター、それはする必要はありません。同様の結果が得られる限り、すべてのオプションを検討します!どうもありがとう :) – Iggy