2016-04-21 2 views
0

J'utilise Kaminari Paginate pour traverser les utilisateurs et leur donner une évaluation. Cependant, certains utilisateurs ne peuvent évaluer que certains utilisateurs, pas tous, mais je suis confus sur la façon de procéder. J'ai essayé de créer un tableau des utilisateurs que je veux afficher, mais cela n'a pas fonctionné correctement puisque je suis très nouveau avec Ruby. Je comprends queUtilisation de Paginate sur certains utilisateurs dans la base de données

<% @users.each do |user| %> 

est ce qui parcourt toute la liste, mais je ne suis pas sûr de savoir comment le modifier à mes besoins. Par exemple, j'ai un attribut de rôle pour chaque utilisateur. Je voudrais que les utilisateurs de chaque rôle évaluent uniquement les autres utilisateurs ayant le même rôle. Je l'ai essayé de faire quelque chose comme

<% @users.each do |user| if @user.role == 1 %> 

mais je sais que ce code exact verbatum ne fonctionnera pas comme je le voudrais, mais c'est un exemple de ce que je veux faire s'il est possible. En résumé, je voudrais choisir qui est dans la liste paginée. Voici mon code que j'essaie de faire. Chaque utilisateur a un formulaire.

<h2>Back of House Evaluation</h2> 
<br> </br> 

<% @users.each do |user| %> 

<h4> <%= user.name %> </h4> 
<h3> Do you have HEART?</h3> 


<%= form_for(user) do |f| %> 
<% begin %> 


     <div class="form-group"> 
     <%= f.label :Hunger_for_wisdom %></label 
     <div class="col-xs-10"> 
     <div class="form-inline"> 
     <div class="form-group"> 
      <%= f.radio_button :current_one, 1 %> 
      <%= f.label :_1 %> 
     </div> 
     <div class="form-group"> 
      <%= f.radio_button :current_one, 2 %> 
      <%= f.label :_2 %> 
     </div> 
     <div class="form-group"> 
      <%= f.radio_button :current_one, 3 %> 
      <%= f.label :_3 %> 
     </div> 
     <div class="form-group"> 
      <%= f.radio_button :current_one, 4 %> 
      <%= f.label :_4 %> 
     </div> 
     <div class="form-group"> 
      <%= f.radio_button :current_one, 5 %> 
      <%= f.label :_5 %> 
     </div> 
    </div> 
</div> 

    <div class="col-md-3 col-md-offset-4"> 
    <%= f.submit "Submit Score", class: "btn btn-default" %> 



    <% rescue ActionController::RedirectBackError %> 


</div> 
</div> 
<% end %> 

<%= paginate @users %> 

<% end %> 

<% end %> 

Merci beaucoup d'avance !!

Répondre

0

En supposant que @user est utilisé pour filtrer la liste visible des utilisateurs, vous pouvez faire quelque chose comme ceci avec votre collection:

<% @users.select{|u| u.role == @user.role}.each do |user| %> 
    # your logic/content here 
<% end %> 

De cette façon, seuls les utilisateurs avec le rôle du rôle de @user sont itérées par.

J'espère que ça aide!

+0

Merci, je vais y jeter un coup d'oeil! – user3376654

2

Pour ce faire, vous pouvez utiliser la méthode reject! pour votre liste d'utilisateurs. Remplacer:

<% @users.each do |user| %> 

par:

<% @users.reject!{|u| u.role != 1}.each do |user| %> 

Mais je préfère filtrer les users indésirables de la liste dans le controller, pas dans la vue. Donc, dans votre contrôleur, vous pouvez appeler quelque chose comme:

@users = User.where(:role => role_id).page(params[:page]) 

role_id est l'identifiant du rôle (1 pour votre exemple), et le params[:page] est le numéro de page que vous voulez charger à partir Kaminari.

J'espère que cela vous aide.

+0

Merci, je vais jouer avec le code une fois de retour à la maison. J'apprécie vraiment les conseils! – user3376654

+0

La partie contrôleur a parfaitement fonctionné !! Merci beaucoup!! – user3376654

+0

@ user3376654 Si cela répond et résout votre problème, s'il vous plaît marquer la réponse comme acceptée, sinon je serai heureux de vous aider. – evedovelli