2016-04-22 9 views
0

Ich habe gerade eine Tabelle, die eine Reihe von Attributen des Benutzers anzeigt. Hier ist mein Problem. Jede Person hat die Möglichkeit, sich bei einer Gruppe anzumelden, aber in einigen Grenzfällen kann eine Person in die Tabelle gelangen, ohne sich einer Gruppe zu unterstellen. Aus Gründen der Klarheit für die Benutzer, die die Tabelle lesen, möchte ich einfach jede Person, die nicht zu einer Gruppe angemeldet ist, aus der Tabelle verstecken. Das ist ein bisschen schwieriger, als ich erwartet habe. Ich zeige etwas Code und einen Screenshot zum besseren Verständnis.Informationen in der Datenbank in der Ansicht ausblenden. - Rails

enter image description here

wie Sie sehen können, wenn eine Person keine Gruppe hat nicht in der Tabelle angezeigt werden soll.

Ich versuche, eine Methode zu machen und es auf dem Controller aufzurufen, der die Tabelle rendert. Die Person und Gruppe sind zwei verschiedene Modelle mit einer Assoziation von HABTM. Wie sage ich "in Ruby", wenn die Person keine Gruppen in der Tabelle anzeigt?

def index 
@people = Person.order(sort_column => sort_direction) 
@groups = Group.all 
end 

Dies ist die Steuerung, die die Tabelle

class Person < ActiveRecord::Base 
    has_many :deliveries 
    has_and_belongs_to_many :groups 
macht

class Group < ActiveRecord::Base 
has_and_belongs_to_many :people 
has_and_belongs_to_many :messages 
end 

perons Modell

<table class="table table-striped"> 
<thead> 
    <tr> 
    <th><%= sortable 'phone_number', 'Phone Number'%></th> 
    <th><%= sortable 'subscribed', 'Subscribed'%></th> 
    <th><%= sortable 'city' %></th> 
    <th><%= sortable 'state' %></th> 
    <th><%= sortable 'zip' %></th> 
    <th><%= sortable 'country' %></th> 
    <th><%= sortable 'created_at', "Joined" %></th> 
    <th>Groups</th> 

    </tr> 
</thead> 
    <tbody> 
    <% @people.each do |person| %> 
     <tr> 
     <td><%= person.phone_number %></td> 
     <td><%= person.subscribed? ? "Yes" : "No" %></td> 
     <td><%= person.city %></td> 
     <td><%= person.state %></td> 
     <td><%= person.zip %></td> 
     <td><%= person.country %></td> 
     <td><%= time_ago_in_words person.created_at %> ago</td> 
     <td><%= person.groups.order(:id).pluck(:name).to_sentence %></td> 
     </tr> 
    <% end %> 
    </tbody> 

Gruppenmodell

+0

können Sie uns zeigen Sie Ihre Ansicht (?, wo Sie eine Schleife durch Menschen - ich nehme an)? – Anthony

+0

Wenn Sie eine Verbindung zwischen Gruppe und Person haben, können Sie das auch zeigen? – sahil

Antwort

2

Diese Optionen sind O (n^2) und ziehen Sie in einem ganz wenig in den Speicher so lange, wie Sie mit, dass ok sind, diese sind einfach zu implementieren:

Sie haben zwei Möglichkeiten, eine für Ihre Ansicht :

<% @people.each do |person| %> 
    <% next if person.groups.blank? %> 
    <tr> 
    <td><%= person.phone_number %></td> 
    <td><%= person.subscribed? ? "Yes" : "No" %></td> 
    <td><%= person.city %></td> 
    <td><%= person.state %></td> 
    <td><%= person.zip %></td> 
    <td><%= person.country %></td> 
    <td><%= time_ago_in_words person.created_at %> ago</td> 
    <td><%= person.groups.order(:id).pluck(:name).to_sentence %></td> 
    </tr> 
<% end %> 

Oder Sie in Ihrem Controller filtern könnte:

@people = Person.order(sort_column => sort_direction).to_a.keep_if { |person| person.groups.present? } 
+0

Danke das eine in Sicht funktioniert aber ich möchte es auf den Controller filtern. Aber wenn ich das versuche, das du vorgeschlagen hast, gibt es mir einen Fehler "keep_if" ist nicht definiert? – Bitwise

+0

Brilliant danke! – Bitwise

Verwandte Themen