2012-04-09 9 views
1

Ich bin neu in Sinatra und ich versuche herauszufinden, wie Abfrage einer Sammlung in Vorlagen arbeiten. In diesem Beispiel versuche ich herauszufinden, ob in einer bestimmten Sammlung (c in diesem Beispiel) von Objekten ein Objekt mit einem bestimmten Wert vorhanden ist.Sinatra Abfrage-Sammlung

<% if c.votes #then filter by an id for example through all of the objects... %> 
    yes, it exists 
<% else %> 
    nope, doesn't exist 
<% end %> 

Außerdem bin ich zu Djangos Filter verwendet wird, ist es eine vergleichbare Dokumentation online, die die verschiedenen Abfragefunktionen für Sinatra skizziert?

+0

Verwenden Sie ein ORM (AciveRecord, Sequel, etc.), oder ist 'c' nur ein" normales "Ruby-Array? –

+0

Ich verwende ein ORM. – captDaylight

Antwort

2

Ist es nur eine Standardkollektion? Sie könnten jedes? Verwenden, was true zurückgibt, wenn der angegebene Block jemals eine Übereinstimmung findet. Sie würden dann jedes Objekt für den Wert testen, den Sie in diesem Block suchen.

<% if c.votes.any? { |a| a.id == whatever } %> 
... 
<% else %> 
... 
<% end %> 

Es hängt wirklich davon ab, was "Stimmen" ist.

1

In Schienen würden Sie <% if c.votes.present? %> verwenden, was hilfreich ist, da andernfalls, wenn c.votes ein leeres Array ist, die Bedingung als wahr ausgewertet würde.

In Sinatra haben Sie .present ?, aber Sie haben ein paar Optionen: <% unless c.vote.empty? %> oder <% if !c.votes.empty %>. Ich mag die Lesbarkeit beider Optionen nicht, also würde ich die Gegenwart hinzufügen? Methode zu Array:

class Array 
    def present? 
    !empty? 
    end 
end 

Wo Sie hinzufügen, hängt davon ab, wie Sie Ihre Sinatra App-Setup haben. Eine Option wäre, sie direkt zu Ihrer Haupt-App hinzuzufügen.

+0

Ich möchte nicht nur sehen, ob es Objekte in der Sammlung gibt, aber was noch wichtiger ist, wenn gesagt wird, dass einer der Stimmen die ID des aktuellen Benutzers zugeordnet ist. – captDaylight

+0

Ahh, das habe ich verpasst. – ToreyHeinz