2012-04-09 4 views
1

Я новичок в Sinatra, и я пытаюсь выяснить, как работает запрос коллекции в шаблонах. В этом конкретном примере я пытаюсь выяснить, есть ли в конкретной коллекции (c в этом примере) объектов, если есть объект с определенным значением.Коллекция запросов Sinatra

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

Кроме того, я привык к фильтрам Джанго, есть сопоставимый документация в Интернете, которые описываются различные функции запроса для Синатра?

+0

Используете ли вы ORM (AciveRecord, Sequel и т. Д.) Или 'c' просто« регулярный »массив Ruby? –

+0

Я использую ORM. – captDaylight

ответ

2

Это стандартная коллекция? Вы можете использовать любой ?, который возвращает true, если предоставленный блок когда-либо находит совпадение. Затем вы проверите каждый объект на значение, которое вы ищете в этом блоке.

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

Это действительно зависит от того, что такое «голоса».

1

В рельсах вы использовали бы <% if c.votes.present? %>, что полезно, поскольку в противном случае, если c.votes является пустым массивом, условие будет оцениваться как true.

В Sinatra у вас нет .представляете ?, но у вас есть пара опций: <% unless c.vote.empty? %> или <% if !c.votes.empty %>. Мне не нравится читаемость любого из вариантов, поэтому я бы воссоздал добавление настоящего? метод к массиву:

class Array 
    def present? 
    !empty? 
    end 
end 

Адрес, где вы добавляете это, зависит от того, как у вас установлена ​​установка приложения Sinatra. Один из вариантов мог бы добавить его непосредственно в основной файл приложения.

+0

Я не хочу видеть только в том случае, если в коллекции есть объекты, но что более важно, если кто-либо из голосов имеет идентификатор текущего пользователя, связанного с ним. – captDaylight

+0

Ах, я пропустил это. – ToreyHeinz

Смежные вопросы