私はレールのスコープに関する問題に遭遇しています。現在のところ、私は、いずれかのカテゴリまたは別のカテゴリにフィルタリングするアプリケーションを引き起こしているインデックスコントローラのケースステートメントがあります。 しかし、私は一度に複数のものをフィルタリングできる必要があります。基本的にスコープをチェーンするため、ユーザーがリンクAをクリックするとスコープAが適用され、リンクBをクリックするとスコープBがスコープAの上に追加され、さらにフィルタリングされます。最終的には、ビューにチェックボックスを追加して、スコープが適用されていることがチェックされ、スコープが選択解除されている場合はスコープが削除されます。スコープを使用して結果をフィルタリングする5
私は、経験を4つの異なるオプション(0-2歳)でフィルタリングする必要があるという理由で、フィルタリングする必要がないため、私が今使用している一連の条件付きロジック(if \ else) 、2〜5年、5〜10年など)。これはすべてのスコープで同じです。
要約すると、フィルタが適用され続ける(フィルタA +フィルタB +フィルタC ...など)ようにスコープを連鎖させる方法を見つける必要があります。フィルタAまたはフィルタBを使用することはできませんが、両者を連携させて結果を絞り込むことはできません。ここ
は、ここに私のスコープ
scope :by_experience, -> (ex) { where(experience: ex) }
scope :by_num_days_past, -> (days_past) { where('created_at >= ?', days_past.days.ago) }
ある私の見解
<!-- toggle for experience -->
<a class="" role="" data-toggle="collapse"
href="#experience-collapse" aria-expanded="false" aria-
controls="experience-collapse">
Experience<br />
</a>
<div class="collapse" id="experience-collapse">
<div class="well">
<%= link_to "0-2 years", filtered_jobs_path(:experience, '0-2 years') %><br />
<%= link_to "2-5 years", filtered_jobs_path(:experience, '2-5 years') %><br />
<%= link_to "5-10 years", filtered_jobs_path(:experience, '5-10 years') %><br />
<%= link_to "10+ years", filtered_jobs_path(:experience, '10+ years') %>
</div>
</div>
<br />
<!-- toggle for num_days_past -->
<a class="" role="" data-toggle="collapse" href="#num-days-
past-collapse" aria-expanded="false" aria-controls="num-days-past-
collapse">
Days Listed<br />
</a>
<div class="collapse" id="num-days-past-collapse">
<div class="well">
<%= link_to "7 days", filtered_jobs_path(:num_days_past, '7') %><br />
<%= link_to "30 days", filtered_jobs_path(:num_days_past, '30') %><br />
<%= link_to "60 days", filtered_jobs_path(:num_days_past, '60') %><br />
</div>
</div>
<br />
は、ここで私は変更がために場所を取るために必要だと思い、私のコントローラのindexアクションですさ一度に複数のスコープが適用されます。
def index
case params[:scope]
when "num_days_past"
if (params[:format] == "7")
@jobs = Job.by_num_days_past("7").paginate(page: params[:page], per_page: 5)
elsif (params[:format] == "30")
@jobs = Job.by_num_days_past("30").paginate(page: params[:page], per_page: 5)
elsif (params[:format] == "60")
@jobs = Job.by_num_days_past("60").paginate(page: params[:page], per_page: 5)
else
@jobs = Job.order('created_at DESC').paginate(page: params[:page], per_page: 5)
end
end