我是Ruby on Rails的新手。我試圖搜索經紀人,其名稱中包含「Jam」,但它給了我錯誤的「錯誤數量的參數(1表示2)「。以下是我的代碼:Ruby on Rails&Mongomapper:錯誤的參數數量(2爲1)
@brokers = Broker.where("firstName = ?", "Jam")
爲什麼我得到錯誤的參數數量錯誤?
我是Ruby on Rails的新手。我試圖搜索經紀人,其名稱中包含「Jam」,但它給了我錯誤的「錯誤數量的參數(1表示2)「。以下是我的代碼:Ruby on Rails&Mongomapper:錯誤的參數數量(2爲1)
@brokers = Broker.where("firstName = ?", "Jam")
爲什麼我得到錯誤的參數數量錯誤?
當您使用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/)
@brokers = Broker.where(firstName: "Jam")
你應該將其括在陣列:
@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.*/)
給錯誤:#
所以你使用的是mongodb,這不是標準的rails安裝,瞭解rails版本很重要。而紅寶石有點過時了1.9.3 –
另外,有什麼例外引發?這個'#
'@brokers = Broker.where(firstName:「Jam」)' – RAJ
它給出同樣的錯誤。 – Pritika
它應該哈希像鍵值firstname是關鍵和值是堵塞 –