2012-04-09 175 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