2017-09-03 4 views
0

J'ai seulement utilisé une étendue statique par défaut pour mes projets et ma dernière version. Je voulais créer une fonctionnalité d'étendue dynamique, où l'utilisateur peut cliquer sur un bouton ou utiliser un menu déroulant pour changer l'ordre, ils voient une liste. Jusqu'à présent, j'ai rencontré quelques méthodes comme l'utilisation d'unscoping et la définition d'une nouvelle portée, et vu réorganiser. Je regarde les docs mais je ne sais pas trop comment rendre un utilisateur capable de choisir. Est-ce que j'utiliserais quelque chose comme Link_to, ou button_to dans le fichier HTML.erb correspondant?permettant aux utilisateurs de modifier l'ordre d'une portée

dans mon dossier post.rb il avait l'air comme ça

default_scope { order(created_at: :desc) } 
scope :ordered_by_title, -> { reorder(title: :asc) } 
scope :ordered_by_reverse_created_at, -> { reorder(created_at: :ASC)} 

j'ai ajouté les autres champs d'application sous la valeur par défaut parce que je suppose un fixerait les champs qu'ils voulaient et la vue appelleraient/les activer une fois qu'un utilisateur clique sur ou choisit à partir de la page rendue.

dans mon post_controller.rb

def index 
    @posts = Post.all 
end 

dans mon index.html.erb la vue

J'ai la liste des postes rendus de cette façon, si elle ne fonctionne pas avec ce que je veux faire quelqu'un peut me montrer un meilleure façon de le faire?

# <some way for user to choose those defined scopes and render the new page would go here> 
<% @posts.each do |post| %> 
    <div class="media"> 
    <div class="media-body"> 
     <h4 class="media-heading"> 
     <%= link_to post.title, post %> 
     <small> <%= post.body %> </small> 
     </h4> 
    </div> 
    </div> 
<% end %> 

Répondre

0

Il existe essentiellement deux façons de le faire:

  1. extrémité avant purement, utilisez js. Vous pouvez utiliser un plugin js existant avec des capacités de tri si vous n'avez pas envie d'écrire le vôtre (par exemple DataTables). Vous devrez probablement créer une table avec les différents attributs disponibles pour que cela fonctionne.

  2. arrière, utilisez ajax. Écrivez le vôtre ou utilisez quelque chose comme filterrific, qui utilise des étendues pour filtrer et trier.