Bonjour,
ca fait un petit moment que je cherche comment faire un filtre (checkbox/select), mais pas moyen de comprendre comment faire ca.

Ce que je fais

Bah j'ai fais le form qui contient les differents checkbox. Les params du filtre sont stockés.

{"utf8"=>"✓", "filter"=>{"date"=>["all"], "user"=>["1"], "sorted_by"=>["date"]}, "controller"=>"pages", "action"=>"dashboard"}

La structure de ma page est comme ca :
pages/dashboard.html.haml

  • layouts/_filter.html.haml
  • items/_items.html.haml

J'ai ma liste d'items que je récupere dans ma pages_controller avec @items = Item.all.order('id ASC')

que j'affiche avec @tickets.each do |ticket|

Ce que je veux

Ce que je souhaite obtenir au final, c'est une liste d'items filtré par les params GET qui ont été séléctionnés.

Ce que j'obtiens

Ce que j'obtiens pour l'instant c'est les params GET dans l'url et une liste d'items non filtré.

Merci de votre aide.

1 réponse


Tu peux essayer en testant le présence des paramètres, d'appliquer un scope sur ton model.

Exemple:

Dans ton controller:

if params[:date].present?
    Ticket.by_user(params[:user])
end

Dans ton model:

scope :by_user, -> (user) { where('user = ?', ticket.user_id) }
scope :sorted_by, -> (sort) { order(sort + "ASC") }

En tout cas c'est sur cette piste que je me lancerais à ta place.

Un lien pour t'aider (il doit surement en exister d'autres) http://www.justinweiss.com/articles/search-and-filter-rails-models-without-bloating-your-controller/