2016-04-21 17 views
0

Ich benutze Kaminari Paginate, um Benutzer zu durchlaufen und ihnen eine Bewertung zu geben. Bestimmte Benutzer können jedoch nur bestimmte Benutzer bewerten, nicht alle, aber ich bin verwirrt darüber, wie das geht. Ich habe versucht, ein Array der Benutzer zu erstellen, die ich anzeigen möchte, aber es hat nicht richtig funktioniert, da ich mit Ruby sehr neu bin. Ich verstehe, dassVerwenden von Paginieren für bestimmte Benutzer in der Datenbank

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

ist, was durch die gesamte Liste durchläuft, aber ich bin nicht sicher, wie es auf meine Bedürfnisse zu bearbeiten. Zum Beispiel habe ich ein Rollenattribut für jeden Benutzer. Ich möchte, dass Benutzer mit jeder Rolle nur andere Benutzer mit derselben Rolle bewerten. Ich habe versucht, etwas zu tun

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

aber ich weiß, dass die genaue Code verbatum nicht so funktionieren, ich möchte, aber das ist ein Beispiel dafür, was ich tun möchte, wenn es möglich ist. Zusammenfassend möchte ich auswählen, wer in der paginierten Liste ist. Unten ist mein Code, den ich versuche zu tun. Jeder Benutzer hat ein Formular.

<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 %> 

Vielen Dank im Voraus!

Antwort

0

Unter der Annahme, dass @user verwendet wird, um die sichtbare Liste der Benutzer zu filtern, können Sie so etwas wie dies mit Ihrer Sammlung tun:

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

Auf diese Weise wird nur die Benutzer mit der Rolle der @user ‚s Rolle sind iterierter durch.

Hoffe es hilft!

+0

Danke, ich werde es mir ansehen! – user3376654

2

Eine Möglichkeit, dies zu erreichen, ist die Verwendung der Methode reject! für Ihre Benutzerliste. Ersetzen:

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

von:

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

Aber ich würde es vorziehen, in den controller unerwünschte users aus der Liste herausgefiltert wird, nicht in der Ansicht. Also in Ihrem Controller, den Sie so etwas wie nennen könnte:

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

wo role_id ist die ID der Rolle (1 für Ihr Beispiel) und die params[:page] ist die Seitenzahl Sie von Kaminari laden möchten.

Hoffe, das hilft Ihnen aus.

+0

Danke, ich werde mit dem Code herumspielen, sobald ich nach Hause komme. Ich schätze die Anleitung sehr! – user3376654

+0

Der Controller Teil hat perfekt funktioniert !! Ich danke dir sehr!! – user3376654

+0

@ user3376654 Wenn dies Ihre Antwort beantwortet und Ihr Problem löst, markieren Sie bitte die Antwort als akzeptiert, ansonsten werde ich Ihnen gerne weiterhelfen. – evedovelli