2015-07-03 82 views
-1

我是Ruby on Rails的新手。我試圖搜索經紀人,其名稱中包含「Jam」,但它給了我錯誤的「錯誤數量的參數(1表示2)「。以下是我的代碼:Ruby on Rails&Mongomapper:錯誤的參數數量(2爲1)

@brokers = Broker.where("firstName = ?", "Jam") 

爲什麼我得到錯誤的參數數量錯誤?

+0

'@brokers = Broker.where(firstName:「Jam」)' – RAJ

+0

它給出同樣的錯誤。 – Pritika

+0

它應該哈希像鍵值firstname是關鍵和值是堵塞 –

回答

2

當您使用MongoMapper,你可能需要使用all。你可以試試下面的查詢:

@brokers = Broker.all(firstName: "Jam") 

OR

@brokers = Broker.where(firstName: "Jam").all 

來源:http://mongomapper.com/documentation/plugins/querying.html

更新:

要使用like行爲,你可以使用正則表達式,如:

@brokers = Broker.all(firstName: /Jam/) 
+0

我怎麼能用它像?我想在firstName中獲取包含'Jam'的所有記錄。 – Pritika

+1

查看已更新回答 – RAJ

+1

嘿,非常感謝Raj :) – Pritika

3
@brokers = Broker.where(firstName: "Jam") 
2

你應該將其括在陣列:

@brokers = Broker.where(["brokers.firstName = ?", "Jam"]) 

話雖這麼說,我們需要知道你的Rails版本(和紅寶石版)。然而,如果你不想使用LIKE,你可以做

@brokers = Broker.where(firstName: "Jam") 

ActiveRecord的有中內置了一些SQL建設者(和支持arel,如果你願意的話),它允許你寫Brokers.where(hash_key: value),它會把它轉換成到SELECT * FROM brokers WHERE hash_key = value,所以你可以用更快的方式編寫簡單的查詢。

您發佈的版本不起作用,因爲where接受單個字符串,數組或哈希映射doesn't accept multiple params

更新1(發現後,您使用的mongomapper):

發現你正在使用mongomapper,這是從默認的Rails的安裝非常不同後(小心如果你是新的,很多東西不適用於你,Rails默認使用activerecord),我相信你必須在通話結束時添加all,就像他們在question中做的那樣。因此,像:

@brokers = Broker.where(firstName: "Jam").all 

還要注意的是這種查詢方式不會與mongomapper工作:(至少通過檢查文檔)

@brokers = Broker.where(["brokers.firstName = ?", "Jam"]) 

所以,你不得不使用一個與where(firstName: "Jam")

更新2(如何執行類似於SQL LIKE查詢):

如果你想讓類似的方式,如SQL LIKE代碼的行爲,因爲你是在評論請求,你就可以使用正則表達式,所以像:

@brokers = Broker.where(firstName: /.*Jam.*/) 
+1

給錯誤:#> – Pritika

+0

所以你使用的是mongodb,這不是標準的rails安裝,瞭解rails版本很重要。而紅寶石有點過時了1.9.3 –

+0

另外,有什麼例外引發?這個'#>'這是一個對象,而不是一個錯誤。你試過運行'to_a',看看它是否包含數據? –

相關問題