2016-04-01 5 views
1

Ich kann nicht scheinen zu verstehen, warum ich diese Fehlermeldung erhalte, wenn ich versuche, auf meiner Methode zu zählen? Hier ist mein CodeNicht definierte Methode für 'Leute' für Null: NilClass

<div class="container"> 
<h2>Statistics</h2> 
<hr /> 

<h3 class="total-number">Total Signups: <%= @engaged %></h3> 
<h3 class='total-number'> All Subscribed People: <%= @person %></h3> 
<hr /> 
<p class='total-number'> Visitor group: <%= @visitor.people.count %></p> 
<p class='total-number'> Dance group: <%= @dance.people.count %></p> 
<p class='total-number'> Staff group: <%= @staff.people.count %></p> 
<p class='total-number'> Volunteer group: <%= @volunteer.people.count %></p> 
<hr /> 
<p><%= link_to "Send Message", root_path %></p> 
</div> 

Hier ist mein Controller

def subscribed_num 
    @person = Person.subscribed.count 
    @engaged = Person.count 
    @dance = Group.find_by(name: "dance") 
    @visitor = Group.find_by(name: "visitor") 
    @volunteer = Group.find_by(name: "volunteer") 
    @staff = Group.find_by(name: "staff") 
    end 

Es scheint gerade nach vorne, aber ich bin wahrscheinlich etwas klein falsch zu machen.

+0

Ihre find_by für Tanz, Besucher, Freiwilliger oder Mitarbeiter ergab keine Ergebnisse so '@ dance',' @ visitor', '@volunteer 'oder' @ staff' ist null. – johnsorrentino

+0

Sie sind richtig, Danke – Bitwise

Antwort

3

Group.find_by(name: 'something') wird nil zurückgeben, wenn keine Gruppe mit dem Namen übereinstimmt.

So ein Besucher, Tanz, Personal oder Freiwilliger scheint nicht zu existieren.

Eine Möglichkeit, solche Situationen zu behandeln, ist die Verwendung einer Null Object, um die Abwesenheit einer Gruppe darzustellen.

Eine Nullgruppe könnte immer eine leere Gruppe von Personen haben.

Hier ist ein Beispiel unter Verwendung der ausgezeichneten Naught gem geschrieben von Avdi Grimm:

NullGroup = Naught.build do |builder| 
    def people 
    [] 
    end 
end 

# controller 
def subscribed_num 
    @person = Person.subscribed.count 
    @engaged = Person.count 
    @dance = Group.find_by(name: "dance") || NullGroup.new 
    @visitor = Group.find_by(name: "visitor") || NullGroup.new 
    @volunteer = Group.find_by(name: "volunteer") || NullGroup.new 
    @staff = Group.find_by(name: "staff") || NullGroup.new 
end 
# 
Verwandte Themen