私は、基本的にインデックスアクションの上に位置するフィルタを構築しようとしています。アイデアは、ユーザーが特定の属性のセットをチェックアウトすることができるという点です(他の属性は気にしない属性に対してチェックを外したままにしておきます)。送信した後、その属性を満たすすべての項目が返されます(未チェックの属性は無視されます)。結果をフィルタリングする - Ruby on Rails
私は、これを行う方法についてさまざまな場所でコードの一部を見ましたが、フォームを作成する方法とそのフォームに関連付けられたコントローラアクションを示すものは何も見ていません。また、ほとんどの場合、チェックボックスを使用しようとしていますが、私はそれを行う多くの例を見ていません。
ここに私がこれまで持っているもののサンプルがあります。 :manhattan_servedと:brooklyn_servedは属性の2つの例に過ぎません。私は、ユーザーが一度に5または6の属性をチェックすることができる20のようなものを持っていることを望みます。
/app/views/experts/filtered_experts.html.erb
<%= form_tag filtered_experts_path, method: :get do %>
<%= label_tag(:manhattan_served, "Serves Manhattan") %>
<%= check_box_tag :manhattan_served, true%>
<%= label_tag(:brooklyn_served, "Serves Brooklyn") %>
<%= check_box_tag :brooklyn_served, true%>
<%= submit_tag "Filter", name: nil %>
<% end %>
は、ここで私は私のコントローラ
/app/controllers/experts_controller.rb
def filtered_experts
@experts = Expert.where(params[filtering_params])
end
private
def filtering_params
params.slice(:manhattan_served, :brooklyn_served)
end
右に持っているものです今、私が提出するとき、私は毎回完全なリストを返します。私のレールのサーバログを見ると、これは、コントローラに渡さなっているように見えます:
Processing by ExpertsController#filtered_experts as HTML
Parameters: {"utf8"=>"✓", "manhattan_served"=>"true", "brooklyn_served"=>"true"}
これはちょうど私にブルックリンとマンハッタンを果たすだけの専門家を返さないだろう、なぜ任意のアイデア?
ありがとうございます!私は、しかしあなたを伝えることができ
おかげで、私は、同様のスコープでこれを行うに探していました。私が立ち往生したのは、form_tagの情報をコントローラに渡してスコープを呼び出す方法でした。コントローラはどのように見えますか?たとえば、スコープは:manhattan_served、 - > {where(manhattan_served:true)} スコープ:brooklyn_served、 - > {where(brooklyn_served:true)}は現在モデルのスコープです。ユーザーが単にマンハッタンのボックスをチェックするだけの場合、コントローラーはマンハッタンのスコープを呼び出すだけで、ブルックリンのスコープは呼び出されません。 –
あなたが何かにそれらのスコープの定義を変更した場合: 'スコープ:manhattan_served、 - >(manhattan_served){( "のようなmanhattan_served?"、|| = '%' をmanhattan_served)' あなたは、その後にそれらを一緒に連鎖することができますあなたのコントローラ: 「Expert.manhattan_served(params [:manhattan_served])。brooklyn_served(params [:brooklyn_served]) ' 'LIKE%'の効果は、値を指定しないとワイルドカードになります。だから、もしそれらのパラメタの1つが(あなたがそれを提供しなかったので)「無」と評価するならば、それは単にそのフィールドをワイルドカードし、他のパラメタを検索するだけです。両方のparamsを指定すると、両方の明示的な一致が返されます。 – 10dot
ありがとうございます。私はhas_scopeの宝石で行くことになった。私はそれを実際に理解するために一から構築したかったのですが、最終的に何をしたいのですか?最初から構築するのはちょっと複雑すぎるかもしれません。ご協力いただきありがとうございます –