簡體   English   中英

使用 try 時出錯,但不使用 try 也能正常工作

[英]gets error when using try, but works fine without try

我的代碼中有這一行:

student.user.try(:services).try( :where, {course_id: params[:current_course]} ).try(:first)

它給出了以下錯誤:

undefined method `where' for #<Array:0x007fc35070da30>

但是當我沒有像這樣嘗試使用它時:

student.user.try(:services).where("course_id = ?", params[:current_course] ).try(:first)

一切都好。

試試有什么問題?

根據您的要求添加回溯:

activesupport (3.2.8) lib/active_support/core_ext/object/try.rb:36:in `try'
  activerecord (3.2.8) lib/active_record/associations/collection_proxy.rb:89:in `method_missing'
  app/controllers/trainings_controller.rb:926:in `block in transfer_students'
  app/controllers/trainings_controller.rb:922:in `each'
  app/controllers/trainings_controller.rb:922:in `transfer_students'
  actionpack (3.2.8) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (3.2.8) lib/abstract_controller/base.rb:167:in `process_action'
  actionpack (3.2.8) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (3.2.8) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
  activesupport (3.2.8) lib/active_support/callbacks.rb:491:in `_run__1196091745092505907__process_action__2696008159292751787__callbacks'
  activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.8) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
  activesupport (3.2.8) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.8) lib/abstract_controller/callbacks.rb:17:in `process_action'
  actionpack (3.2.8) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (3.2.8) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
  activesupport (3.2.8) lib/active_support/notifications.rb:123:in `block in instrument'
  activesupport (3.2.8) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (3.2.8) lib/active_support/notifications.rb:123:in `instrument'
  actionpack (3.2.8) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
  actionpack (3.2.8) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
  activerecord (3.2.8) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (3.2.8) lib/abstract_controller/base.rb:121:in `process'
  actionpack (3.2.8) lib/abstract_controller/rendering.rb:45:in `process'
  actionpack (3.2.8) lib/action_controller/metal.rb:203:in `dispatch'
  actionpack (3.2.8) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'

將此移至答案,因為它似乎很有幫助。

閱讀發行說明,這似乎是Object.try的遺留行為。 在 Rails 4 中它被更改為當前的期望:

“如果接收 object 未實現該方法,Object#try 現在將返回 nil 而不是引發 NoMethodError”

Rails 4.0 發行說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM