麻烦通过关联对象创建现有模型的新对象

时间:2014-03-20 19:16:42

标签: ruby-on-rails activerecord ruby-on-rails-4

我试图通过关联创建一个新对象:

def create
  @enhancement = current_user.enhancements.create enhancement_params

  if @enhancement.save!
    redirect_to enhancements_path, notice: "Mission Control has receieved your request"
  else
    redirect_to enhancements_path, notice: "Danger! Mission Control could not receive your request!"
  end
end

我得到的错误是:

wrong number of arguments (1 for 0)

我也试过

@enhancement = current_user.enhancements.new enhancement_params

然后可供参考,以下是我传递的强参数

def enhancement_params
  params.require(:enhancement).permit(:name, :description, :user_id, :status)
end

关联方面,模型增强属于用户模型,用户模型具有多种增强功能。

我不知道我做错了什么,偷偷摸摸的怀疑我错过了一些非常简单的事情,但我已经浪费了足够的时间在这上面。有什么想法会发生什么?我能给你什么其他信息吗?

已更新 -

我正在做

 def create
    @enhancement = Enhancement.create enhancement_params
    if @enhancement.save
      redirect_to enhancements_path, notice: "Mission Control has receieved your request"
    else
      redirect_to enhancements_path, notice: "Danger! Mission Control could not receive your request!"
    end
  end

这里是错误:     错误的参数数量(1表示0)

  

开始发布" /增强功能"在2014-03-20 16:29:38发表于127.0.0.1   -0500 EnhancementsController处理#create as HTML参数:{" utf8" =>"✓",   " authenticity_token" = GT;" pKfKnNGB4CWNSBOOKAe / l6Em + MSV5l + tLS0kDRTCQEc =&#34 ;,   "增强" => {"名称" =>"哇什么增强","描述" =>"这样   enhamcnet \ r \ n \ r \ nvery哇"},"提交" =>"保存增强功能"}已完成   500毫秒内部服务器错误

     

ArgumentError - 参数数量错误(1表示0):
  activerecord-deprecated_finders(1.0.3)   lib / active_record / deprecated_finders / base.rb:28:在call'
activerecord (4.0.2) lib/active_record/scoping/named.rb:163:in
块中   (2级)范围' activerecord(4.0.2)   lib / active_record / relation.rb:270:在范围scoping' activerecord (4.0.2) lib/active_record/scoping/named.rb:163:in块中'
  activerecord(4.0.2)lib / active_record / persistence.rb:36:in create'
app/controllers/enhancements_controller.rb:12:in
create' ActionPack的   (4.0.2)lib / action_controller / metal / implicit_render.rb:4:in   send_action' actionpack (4.0.2) lib/abstract_controller/base.rb:189:in process_action' ActionPack的   (4.0.2)lib / action_controller / metal / rendering.rb:10:in   process_action' actionpack (4.0.2) lib/abstract_controller/callbacks.rb:18:in阻止了process_action'
  activesupport(4.0.2)lib / active_support / callbacks.rb:403:in   _run__3594477325221698156__process_action__callbacks' activesupport (4.0.2) lib/active_support/callbacks.rb:80:in run_callbacks'
  actionpack(4.0.2)lib / abstract_controller / callbacks.rb:17:in   process_action' actionpack (4.0.2) lib/action_controller/metal/rescue.rb:29:in process_action'
  actionpack(4.0.2)   lib / action_controller / metal / instrumentation.rb:31:在仪器的block in process_action' activesupport (4.0.2) lib/active_support/notifications.rb:159:in块中'
  activesupport(4.0.2)   lib / active_support / notifications / instrumenter.rb:20:在instrument'
activesupport (4.0.2) lib/active_support/notifications.rb:159:in
工具' actionpack(4.0.2)   lib / action_controller / metal / instrumentation.rb:30:在process_action' actionpack (4.0.2) lib/action_controller/metal/params_wrapper.rb:245:in process_action'   activerecord(4.0.2)   LIB / active_record / railties / controller_runtime.rb:18:在   process_action' actionpack (4.0.2) lib/abstract_controller/base.rb:136:in过程' actionpack(4.0.2)   lib / abstract_controller / rendering.rb:44:在process' actionpack (4.0.2) lib/action_controller/metal.rb:195:in发送' ActionPack的   (4.0.2)lib / action_controller / metal / rack_delegation.rb:13:in   dispatch' actionpack (4.0.2) lib/action_controller/metal.rb:231:in 阻止行动' actionpack(4.0.2)   lib / action_dispatch / routing / route_set.rb:80:in dispatch' actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:48:in来电'
  actionpack(4.0.2)lib / action_dispatch / journey / router.rb:71:在block in call' actionpack (4.0.2) lib/action_dispatch/journey/router.rb:59:in电话' ActionPack的   (4.0.2)lib / action_dispatch / routing / route_set.rb:680:在呼叫中call'
warden (1.2.3) lib/warden/manager.rb:35:in
阻止'看守   (1.2.3)lib / warden / manager.rb:34:in call' rack (1.5.2) lib/rack/etag.rb:23:in来电'机架(1.5.2)   lib / rack / conditionalget.rb:35:in call' rack (1.5.2) lib/rack/head.rb:11:in来电' actionpack(4.0.2)   lib / action_dispatch / middleware / params_parser.rb:27:in call'
actionpack (4.0.2) lib/action_dispatch/middleware/flash.rb:241:in
来电' rack(1.5.2)lib / rack / session / abstract / id.rb:225:context' rack (1.5.2) lib/rack/session/abstract/id.rb:220:in来电'
  actionpack(4.0.2)lib / action_dispatch / middleware / cookies.rb:486:in   call' activerecord (4.0.2) lib/active_record/query_cache.rb:36:in 呼叫' activerecord(4.0.2)   LIB / active_record / connection_adapters /抽象/ connection_pool.rb:626:在   call' activerecord (4.0.2) lib/active_record/migration.rb:369:in 呼叫' actionpack(4.0.2)   lib / action_dispatch / middleware / callbacks.rb:29:在block in call'
activesupport (4.0.2) lib/active_support/callbacks.rb:373:in
_ run__4163598129264950275__call__callbacks' activesupport(4.0.2)   lib / active_support / callbacks.rb:80:in run_callbacks' actionpack (4.0.2) lib/action_dispatch/middleware/callbacks.rb:27:in来电'
  actionpack(4.0.2)lib / action_dispatch / middleware / reloader.rb:64:in   call' actionpack (4.0.2) lib/action_dispatch/middleware/remote_ip.rb:76:in呼叫'
  better_errors(1.1.0)lib / better_errors / middleware.rb:84:in   protected_app_call' better_errors (1.1.0) lib/better_errors/middleware.rb:79:in better_errors_call'
  better_errors(1.1.0)lib / better_errors / middleware.rb:56:in call'
actionpack (4.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:17:in
来电'
  actionpack(4.0.2)   lib / action_dispatch / middleware / show_exceptions.rb:30:in call'
railties (4.0.2) lib/rails/rack/logger.rb:38:in
call_app' railties   (4.0.2)lib / rails / rack / logger.rb:20:在标记的block in call' activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in块中'
  activesupport(4.0.2)lib / active_support / tagged_logging.rb:25:in   tagged' activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in标记'铁路(4.0.2)   lib / rails / rack / logger.rb:20:in call' actionpack (4.0.2) lib/action_dispatch/middleware/request_id.rb:21:in来电'架   (1.5.2)lib / rack / methodoverride.rb:21:在call' rack (1.5.2) lib/rack/runtime.rb:17:in电话' activesupport(4.0.2)   lib / active_support / cache / strategy / local_cache.rb:83:in call' rack (1.5.2) lib/rack/lock.rb:17:in call' actionpack(4.0.2)   lib / action_dispatch / middleware / static.rb:64:in call' rack (1.5.2) lib/rack/sendfile.rb:112:in call'铁路(4.0.2)   lib / rails / engine.rb:511:call' railties (4.0.2) lib/rails/application.rb:97:in来电'机架(1.5.2)   lib / rack / lock.rb:17:in call' rack (1.5.2) lib/rack/content_length.rb:14:in来电'机架(1.5.2)   lib / rack / handler / webrick.rb:60:in service'
/Users/chris/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/webrick/httpserver.rb:138:in
service'
  /Users/chris/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/webrick/httpserver.rb:94:in   {_ 1}}阻止start_thread' `

1 个答案:

答案 0 :(得分:1)

尝试:

def create
  @enhancement = current_user.enhancements.build enhancement_params

  if @enhancement.save # without bang method, it throws an exception
    redirect_to enhancements_path, notice: "Mission Control has receieved your request"
  else
    redirect_to enhancements_path, notice: "Danger! Mission Control could not receive your request!"
  end
end

我无法想象哪个方法会在该操作中引发错误,因此您应该检查before_filter(或before_action中的Rails 4)是否导致错误。