2012-04-09 83 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 %> 

而且,我已经习惯了Django的过滤器,是有它概述了西纳特拉的各种查询功能相当的联机文档?

+0

您使用的是ORM(AciveRecord,Sequel等),还是'c'只是一个“常规”Ruby数组? – 2012-04-09 00:12:56

+0

我正在使用ORM。 – captDaylight 2012-04-09 00:44:33

回答

2

它只是一个标准集合吗?您可以使用任何?,如果提供的块发现匹配,则返回true。然后,您将测试每个对象的值,以查找该块中正在查找的值。

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

这真的取决于“投票”是什么。

1

在rails中,您将使用<% if c.votes.present? %>这很有帮助,因为否则如果c.votes是一个空数组,则条件将评估为true。

在Sinatra中,您没有.present?,但您有几个选项:<% unless c.vote.empty? %><% if !c.votes.empty %>。我不喜欢任一选项的可读性,所以我会重新添加现在的?方法到阵列:

class Array 
    def present? 
    !empty? 
    end 
end 

你添加这个取决于你如何有你的Sinatra应用程序设置。一个选项将直接添加到您的主应用程序文件。

+0

我不希望只有在集合中有对象时才会看到,但更重要的是,如果说任何投票都有与其关联的当前用户的标识。 – captDaylight 2012-04-09 01:27:25

+0

啊,我错过了。 – ToreyHeinz 2012-04-09 12:41:24