2013-10-24 94 views
0

我錯過了一些簡單的 - 我不要想要在視圖中訪問此查詢的結果。如何獲得我的控制器中的Plucky查詢結果?

下面是該查詢:

@adm = Admin.where({:id => {"$ne" => params[:id].to_s},:email => params[:email]}) 

當然,當你檢查你:

@adm is #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery:0x007fb4be99acd0> 

我明白了(從詢問MM的傢伙),爲什麼是這樣的話 - 他們希望儘可能延遲實際查詢的結果,並且只有在渲染之前(在視圖中!)才能獲得查詢對象的表示形式。

但是,我試圖確定在我的代碼是如果我的一個params匹配或不匹配我的查詢結果在控制器,所以我可以返回一個錯誤消息或繼續。

通常在一個視圖我打算做的事:

@adm.id 

要獲得BSON出於此。當您嘗試這樣的裝飾查詢當然這失敗:

NoMethodError (undefined method `id' for #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery:0x007fb4b9e9f118>) 

這是因爲它實際上不是一個Ruby對象還沒有,它仍然是查詢代理。

現在我從根本上失去了一些東西,因爲我從來沒有讀過「Ruby入門指南」 - 我只是在這裏砸了我的路,並通過蠻力學習。那麼,我要調用什麼方法才能獲得Plucky查詢的結果?

回答

0

將字段@adm設置爲查詢,如您所見。因此,要訪問結果,您需要觸發查詢的執行。您可以調用各種激活方法,包括all,firstlast。有一些文檔here

在這種情況下,你可以這樣做:

adm_query = Admin.where({:id => {"$ne" => params[:id].to_s},:email => params[:email]}) 
@adm_user = adm_query.first 

,將返回你的第一個用戶,並檢查nil

if @adm_user.nil? 
    # do something if no results were found 
end 

後,你也可以limit查詢結果:

adm_query = Admin.where(... your query ...).limit(1) 
+0

雖然這似乎是答案 - 這不是我所希望的。我知道我的查詢只有一個結果,所以我不想限制它或以任何方式對它進行操作。但是,唉,似乎我必須。 – notaceo

+0

爲什麼這很重要?一旦被查詢,就會被查詢。它不需要再次查詢。 – WiredPrairie

+0

重點是我知道我只會得到一個單一的結果,但我想模糊查詢基於where語句,而不是「find_by_id」或類似的。但是我必須使用find_by_X方法,這是可以的,因爲我沒有絆倒自己尋找一個我還不知道的ID。有時當我不知道我想使用的ID時,但我確實知道另一個字段中的值時,我可以更容易地進行搜索 - 但這意味着我的邏輯很糟糕,我猜... – notaceo

相關問題