2015-11-08 21 views
1

我正在寫一個查詢以獲取來自數據庫的值使用Get Response.Everything是Okfrom響應side.But,我掙扎在模型中的查詢。Rails活動記錄哪裏方法錯誤與傳遞兩個參數與Mongo數據庫

@scroll = Scroll.where("name = %?%","#{params[:name]}")

這個查詢有兩個參數。我知道這是查詢的網址 在Ruby on Rails的文檔中給出。 Here:

我可以使用查詢檢索值:

@scroll = Scroll.where(name: params[:name])

這上面的查詢工作,如果整個單詞Matches.I希望它接受了一封信,發現包含字母的單詞。
我正在做一個自動完成的搜索box.so,我需要一個查詢,其中包含字母的名稱列中的值作爲用戶類型的字母的行。 我與MongoDB的

發帖FullTrace工作:

mongoid (5.0.1) lib/mongoid/criteria.rb:449:in `where' 
(eval):2:in `where' 
app/controllers/scrolls_controller.rb:4:in `index' 
actionpack (4.2.4) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
actionpack (4.2.4) lib/abstract_controller/base.rb:198:in `process_action' 
actionpack (4.2.4) lib/action_controller/metal/rendering.rb:10:in `process_action' 
actionpack (4.2.4) lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
activesupport (4.2.4) lib/active_support/callbacks.rb:117:in `call' 
activesupport (4.2.4) lib/active_support/callbacks.rb:117:in `call' 
activesupport (4.2.4) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile' 
activesupport (4.2.4) lib/active_support/callbacks.rb:505:in `call' 
activesupport (4.2.4) lib/active_support/callbacks.rb:505:in `call' 
activesupport (4.2.4) lib/active_support/callbacks.rb:92:in `__run_callbacks__' 
activesupport (4.2.4) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks' 
activesupport (4.2.4) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (4.2.4) lib/abstract_controller/callbacks.rb:19:in `process_action' 
actionpack (4.2.4) lib/action_controller/metal/rescue.rb:29:in `process_action' 
actionpack (4.2.4) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action' 
activesupport (4.2.4) lib/active_support/notifications.rb:164:in `block in instrument' 
activesupport (4.2.4) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (4.2.4) lib/active_support/notifications.rb:164:in `instrument' 
actionpack (4.2.4) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
actionpack (4.2.4) lib/action_controller/metal/params_wrapper.rb:250:in `process_action' 
actionpack (4.2.4) lib/abstract_controller/base.rb:137:in `process' 
actionview (4.2.4) lib/action_view/rendering.rb:30:in `process' 
actionpack (4.2.4) lib/action_controller/metal.rb:196:in `dispatch' 
actionpack (4.2.4) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' 
actionpack (4.2.4) lib/action_controller/metal.rb:237:in `block in action' 
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:76:in `call' 
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:76:in `dispatch' 
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:45:in `serve' 
actionpack (4.2.4) lib/action_dispatch/journey/router.rb:43:in `block in serve' 
actionpack (4.2.4) lib/action_dispatch/journey/router.rb:30:in `each' 
actionpack (4.2.4) lib/action_dispatch/journey/router.rb:30:in `serve' 
actionpack (4.2.4) lib/action_dispatch/routing/route_set.rb:821:in `call' 
rack (1.6.4) lib/rack/etag.rb:24:in `call' 
rack (1.6.4) lib/rack/conditionalget.rb:25:in `call' 
rack (1.6.4) lib/rack/head.rb:13:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/params_parser.rb:27:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/flash.rb:260:in `call' 
rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context' 
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/cookies.rb:560:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
activesupport (4.2.4) lib/active_support/callbacks.rb:88:in `__run_callbacks__' 
activesupport (4.2.4) lib/active_support/callbacks.rb:778:in `_run_call_callbacks' 
activesupport (4.2.4) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (4.2.4) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/reloader.rb:73:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/remote_ip.rb:78:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 
web-console (2.2.1) lib/web_console/middleware.rb:39:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
railties (4.2.4) lib/rails/rack/logger.rb:38:in `call_app' 
railties (4.2.4) lib/rails/rack/logger.rb:20:in `block in call' 
activesupport (4.2.4) lib/active_support/tagged_logging.rb:68:in `block in tagged' 
activesupport (4.2.4) lib/active_support/tagged_logging.rb:26:in `tagged' 
activesupport (4.2.4) lib/active_support/tagged_logging.rb:68:in `tagged' 
railties (4.2.4) lib/rails/rack/logger.rb:20:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call' 
rack (1.6.4) lib/rack/runtime.rb:18:in `call' 
activesupport (4.2.4) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
rack (1.6.4) lib/rack/lock.rb:17:in `call' 
actionpack (4.2.4) lib/action_dispatch/middleware/static.rb:116:in `call' 
rack (1.6.4) lib/rack/sendfile.rb:113:in `call' 
railties (4.2.4) lib/rails/engine.rb:518:in `call' 
railties (4.2.4) lib/rails/application.rb:165:in `call' 
rack (1.6.4) lib/rack/lock.rb:17:in `call' 
rack (1.6.4) lib/rack/content_length.rb:15:in `call' 
rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service' 
/home/ashrith/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service' 
/home/ashrith/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run' 
/home/ashrith/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread' 
+0

如果這給你錯誤,這可能意味着某人在模型或ActiveRecord類的某處更改了'where'方法。 –

+0

你可以搜索你的代碼「def where」嗎? –

+0

另外,你可以發佈完整的回溯? –

回答

1

我希望它接受了一封信,找到包含 字母的單詞。

這應該工作:

@scroll = Scroll.where("name LIKE ?","%#{params[:name]}%") 

更新: 我不熟悉的MongoDB自己,但也許這樣的事情會工作:

<your_table>.find({"name": /.*params[:name].*/}) 

僅供參考見: How to query MongoDB with "like"?

+0

啊!我錯過了他沒有寫「LIKE」。 :) –

+0

OP使用的是Mongoid/MongoDB,而不是ActiveRecord/SQL,MongoDB中沒有LIKE,也不能使用SQL snippets。 –

0

您正在使用Mongoid和MongoDB,因此您不能使用小的SQL片段(如'name = ?')和where。 Mongoid的where只能理解單個哈希,因此對於錯誤的參數個數有所抱怨。同樣,你不能在查詢中使用%和LIKE,因爲這是SQL和MongoDB不理解SQL。

這工作:

Scroll.where(name: params[:name]) 

,因爲你只有通過where一個哈希參數。但是,這:

Scroll.where('name = ?', params[:name]) 

正試圖使用​​SQL與MongoDB,並且不起作用。

如果你想要做的MongoDB的模式匹配,那麼你可以使用正則表達式:

Scroll.where(:name => /#{Regexp.escape(params[:name])}/i) 

請注意,我使用Regexp.escapeparams[:name]正確逃避什麼,也正則表達式的語法,我也做一個不區分大小寫的匹配。