2011-11-10 43 views
0

我試圖從Mongoid檢索所有請求=「預覽」的「卡片」Ruby on Rails和Mongoid讓我瘋了!關於查詢的幾個簡單問題

我這樣做是通過:

 @preview_cards = Card.where("request" => "PREVIEW") 

我有幾個問題。

1)爲什麼我不能這樣做?

 @preview_cards = Card.find_by_request("PREVIEW") 

我得到一個錯誤:卡的未定義方法`find_by_request':類

2)一旦我在@preview_cards變量中有卡,我就無法迭代它們。例如:

@preview_cards.each do |c| c.fullname end 

只返回對象id #<Mongoid::Criteria:0x103eaf778>

3)是否有「all」方法可以調用而不是第一個和最後一個。例如,這適用:

@preview_cards.first.fullname 

但我希望能夠遍歷mongo中的每個「行」。

任何幫助將不勝感激!謝謝。

回答

1

沒有模式,所以沒有自動生成方法。不過,您可以創建自己的助手。

你確定嗎?這對我來說很好。返回的內容與嘗試迭代後發生的不同。例如:

[19] pry(main)> ts = FooDoc.where("name" => "ohai") 
=> #<Mongoid::Criteria 
    selector: {"name"=>"ohai"}, 
    options: {}, 
    class: FooDoc, 
    embedded: false> 

[20] pry(main)> ts.each { |t| p t.name } 
"ohai" 
=> #<Mongoid::Criteria 
    selector: {"name"=>"ohai"}, 
    options: {}, 
    class: FooDoc, 
    embedded: false> 

爲了讓所有,使用all

Card.all(conditions: { request: "PREVIEW" }) 
+0

感謝清理了「AUTOMAGIC方法的一代」 - 我非常習慣沒有PHP框架,而不能告訴什麼時候事情應該是神奇的,而不是。另外,所有方法的「條件」都會拋出一個錯誤..也許我正在做一些奇怪的事情。在任何情況下,每個都能正常工作,所以我會使用它。謝謝。 –

+0

@BrianW沒問題;我使用Ruby 1.9語法 - 你在1.8嗎?如果是這樣,請使用舊的哈希語法。 –