Ruby on rails Rails:将嵌套属性与强参数合并

Ruby on rails Rails:将嵌套属性与强参数合并,ruby-on-rails,merge,strong-parameters,Ruby On Rails,Merge,Strong Parameters,在Rails 4中,可以将额外参数与用户生成的参数合并,如下所示: params.require(:post).permit([:title, :body]).merge(user: current_user) params.require(:post).permit([:title, :body, sections_attributes: [:title, :section_type]]) 也可以包括嵌套属性,如: params.require(:post).permit([:tit

在Rails 4中,可以将额外参数与用户生成的参数合并,如下所示:

 params.require(:post).permit([:title, :body]).merge(user: current_user)
 params.require(:post).permit([:title, :body, sections_attributes: [:title, :section_type]])
也可以包括嵌套属性,如:

 params.require(:post).permit([:title, :body]).merge(user: current_user)
 params.require(:post).permit([:title, :body, sections_attributes: [:title, :section_type]])
现在,如果我想将额外的参数合并到嵌套模型中,该怎么办。我试过这个:

params.require(:post).permit([:title, :body, sections_attributes: [:title, :section_type]]).merge(user: current_user, sections_attributes: [user: current_user])
但是,当我随后使用调试器检查参数时,我发现
user
覆盖了其他
section\u属性,而不是与它们合并。有没有更好的方法来解决这个问题

Full backtrace
--------------

 - activemodel (4.0.0.rc1) lib/active_model/attribute_methods.rb:436:in `method_missing'
 - activerecord (4.0.0.rc1) lib/active_record/attribute_methods.rb:131:in `method_missing'
 - activerecord (4.0.0.rc1) lib/active_record/nested_attributes.rb:432:in `block in assign_nested_attributes_for_collection_association'
 - activerecord (4.0.0.rc1) lib/active_record/nested_attributes.rb:431:in `assign_nested_attributes_for_collection_association'
 - activerecord (4.0.0.rc1) lib/active_record/nested_attributes.rb:322:in `comments_attributes='
 - activerecord (4.0.0.rc1) lib/active_record/attribute_assignment.rb:42:in `_assign_attribute'
 - activerecord (4.0.0.rc1) lib/active_record/attribute_assignment.rb:53:in `block in assign_nested_parameter_attributes'
 - activerecord (4.0.0.rc1) lib/active_record/attribute_assignment.rb:53:in `assign_nested_parameter_attributes'
 - activerecord (4.0.0.rc1) lib/active_record/attribute_assignment.rb:33:in `assign_attributes'
 - activerecord (4.0.0.rc1) lib/active_record/core.rb:192:in `initialize'
 - activerecord (4.0.0.rc1) lib/active_record/inheritance.rb:27:in `new'
 - activerecord (4.0.0.rc1) lib/active_record/reflection.rb:189:in `build_association'
 - activerecord (4.0.0.rc1) lib/active_record/associations/association.rb:235:in `build_record'
 - activerecord (4.0.0.rc1) lib/active_record/associations/has_many_through_association.rb:102:in `build_record'
 - activerecord (4.0.0.rc1) lib/active_record/associations/collection_association.rb:114:in `build'
 - activerecord (4.0.0.rc1) lib/active_record/associations/collection_proxy.rb:229:in `build'
 - app/controllers/forum/topics_controller.rb:16:in `create'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
 - actionpack (4.0.0.rc1) lib/abstract_controller/base.rb:189:in `process_action'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/rendering.rb:10:in `process_action'
 - actionpack (4.0.0.rc1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
 - activesupport (4.0.0.rc1) lib/active_support/callbacks.rb:422:in `_run__642753351245287313__process_action__callbacks'
 - activesupport (4.0.0.rc1) lib/active_support/callbacks.rb:80:in `run_callbacks'
 - actionpack (4.0.0.rc1) lib/abstract_controller/callbacks.rb:17:in `process_action'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/rescue.rb:29:in `process_action'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
 - activesupport (4.0.0.rc1) lib/active_support/notifications.rb:159:in `block in instrument'
 - activesupport (4.0.0.rc1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
 - activesupport (4.0.0.rc1) lib/active_support/notifications.rb:159:in `instrument'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
 - activerecord (4.0.0.rc1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
 - actionpack (4.0.0.rc1) lib/abstract_controller/base.rb:136:in `process'
 - actionpack (4.0.0.rc1) lib/abstract_controller/rendering.rb:44:in `process'
 - actionpack (4.0.0.rc1) lib/action_controller/metal.rb:195:in `dispatch'
 - actionpack (4.0.0.rc1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
 - actionpack (4.0.0.rc1) lib/action_controller/metal.rb:231:in `block in action'
 - actionpack (4.0.0.rc1) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
 - actionpack (4.0.0.rc1) lib/action_dispatch/routing/route_set.rb:48:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/journey/router.rb:71:in `block in call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/journey/router.rb:59:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/routing/route_set.rb:654:in `call'
 - request_store (1.0.5) lib/request_store/middleware.rb:9:in `call'
 - warden (1.2.1) lib/warden/manager.rb:35:in `block in call'
 - warden (1.2.1) lib/warden/manager.rb:34:in `call'
 - rack (1.5.2) lib/rack/etag.rb:23:in `call'
 - rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
 - rack (1.5.2) lib/rack/head.rb:11:in `call'
 -  () home/timothythehuman/.rvm/gems/ruby-2.0.0-p0@whistlr/bundler/gems/remotipart-2d6e0949acc2/lib/remotipart/middleware.rb:30:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/flash.rb:241:in `call'
 - rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
 - rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/cookies.rb:486:in `call'
 - activerecord (4.0.0.rc1) lib/active_record/query_cache.rb:36:in `call'
 - activerecord (4.0.0.rc1) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
 - activerecord (4.0.0.rc1) lib/active_record/migration.rb:366:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
 - activesupport (4.0.0.rc1) lib/active_support/callbacks.rb:392:in `_run__4051735323972233883__call__callbacks'
 - activesupport (4.0.0.rc1) lib/active_support/callbacks.rb:80:in `run_callbacks'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/reloader.rb:64:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
 - better_errors (0.9.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
 - better_errors (0.9.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
 - better_errors (0.9.0) lib/better_errors/middleware.rb:56:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
 - railties (4.0.0.rc1) lib/rails/rack/logger.rb:38:in `call_app'
 - railties (4.0.0.rc1) lib/rails/rack/logger.rb:21:in `block in call'
 - activesupport (4.0.0.rc1) lib/active_support/tagged_logging.rb:67:in `block in tagged'
 - activesupport (4.0.0.rc1) lib/active_support/tagged_logging.rb:25:in `tagged'
 - activesupport (4.0.0.rc1) lib/active_support/tagged_logging.rb:67:in `tagged'
 - railties (4.0.0.rc1) lib/rails/rack/logger.rb:21:in `call'
 - actionpack (4.0.0.rc1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
 - rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
 - rack (1.5.2) lib/rack/runtime.rb:17:in `call'
 - activesupport (4.0.0.rc1) 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.0.rc1) lib/action_dispatch/middleware/static.rb:64:in `call'
 - railties (4.0.0.rc1) lib/rails/engine.rb:511:in `call'
 - railties (4.0.0.rc1) lib/rails/application.rb:96:in `call'
 - rack (1.5.2) lib/rack/content_length.rb:14:in `call'
 - thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
 - thin (1.5.1) lib/thin/connection.rb:79:in `pre_process'
 - thin (1.5.1) lib/thin/connection.rb:54:in `process'
 - thin (1.5.1) lib/thin/connection.rb:39:in `receive_data'
 - eventmachine (1.0.3) lib/eventmachine.rb:187:in `run'
 - thin (1.5.1) lib/thin/backends/base.rb:63:in `start'
 - thin (1.5.1) lib/thin/server.rb:159:in `start'
 - rack (1.5.2) lib/rack/handler/thin.rb:16:in `run'
 - rack (1.5.2) lib/rack/server.rb:264:in `start'
 - railties (4.0.0.rc1) lib/rails/commands/server.rb:84:in `start'
 - railties (4.0.0.rc1) lib/rails/commands.rb:80:in `block in <top (required)>'
 - railties (4.0.0.rc1) lib/rails/commands.rb:75:in `<top (required)>'
 - bin/rails:4:in `<main>'
完全回溯
--------------
-activemodel(4.0.0.rc1)lib/active\u model/attribute\u methods.rb:436:in'method\u missing'
-activerecord(4.0.0.rc1)lib/active\u record/attribute\u methods.rb:131:in'method\u missing'
-activerecord(4.0.0.rc1)lib/active\u record/nested\u attributes.rb:432:in`block in assign\u nested\u attributes\u for\u collection\u association'
-activerecord(4.0.0.rc1)lib/active\u record/nested\u attributes.rb:431:in“为集合关联分配\u nested\u attributes”
-activerecord(4.0.0.rc1)lib/active\u record/nested\u attributes.rb:322:in`comments\u attributes='1〕
-activerecord(4.0.0.rc1)lib/active\u record/attribute\u assignment.rb:42:in`\u assign\u attribute'
-activerecord(4.0.0.rc1)lib/active\u record/attribute\u assignment.rb:53:in`block in assign\u nested\u parameter\u attributes'
-activerecord(4.0.0.rc1)lib/active\u record/attribute\u assignment.rb:53:in'assign\u nested\u parameter\u attributes'
-activerecord(4.0.0.rc1)lib/active\u record/attribute\u assignment.rb:33:in'assign\u attributes'
-activerecord(4.0.0.rc1)lib/active\u record/core.rb:192:in'initialize'
-activerecord(4.0.0.rc1)lib/active_record/heritation.rb:27:in'new'
-activerecord(4.0.0.rc1)lib/active\u record/reflection.rb:189:in'build\u association'
-activerecord(4.0.0.rc1)lib/active_record/associations/association.rb:235:in'build_record'
-activerecord(4.0.0.rc1)lib/active\u record/associations/has\u many\u to\u association.rb:102:in'build\u record'
-activerecord(4.0.0.rc1)lib/active\u record/associations/collection\u association.rb:114:in'build'
-activerecord(4.0.0.rc1)lib/active\u record/associations/collection\u proxy.rb:229:in'build'
-app/controllers/forum/topics_controller.rb:16:in'create'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/implicit\u render.rb:4:in'send\u action'
-actionpack(4.0.0.rc1)lib/abstract\u controller/base.rb:189:in'process\u action'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/rendering.rb:10:in'process\u action'
-actionpack(4.0.0.rc1)lib/abstract\u controller/callbacks.rb:18:in'block in process\u action'
-activesupport(4.0.0.rc1)lib/active\u support/callbacks.rb:422:in`_run\u 642753351245287313\u进程\u操作\u回调'
-activesupport(4.0.0.rc1)lib/active\u support/callbacks.rb:80:in'run\u callbacks'
-actionpack(4.0.0.rc1)lib/abstract\u controller/callbacks.rb:17:in'process\u action'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/rescue.rb:29:in'process\u action'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/instrumentation.rb:31:in'block-in-process\u action'
-activesupport(4.0.0.rc1)lib/active_support/notifications.rb:159:in'block in instrument'
-activesupport(4.0.0.rc1)lib/active\u support/notifications/instrumenter.rb:20:in'instrument'
-activesupport(4.0.0.rc1)lib/active_support/notifications.rb:159:in'instrument'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/instrumentation.rb:30:in'process\u action'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/params\u wrapper.rb:245:in'process\u action'
-activerecord(4.0.0.rc1)lib/active\u record/railties/controller\u runtime.rb:18:in'process\u action'
-actionpack(4.0.0.rc1)lib/abstract\u controller/base.rb:136:在“进程”中
-actionpack(4.0.0.rc1)lib/abstract_controller/rendering.rb:44:在“进程”中
-actionpack(4.0.0.rc1)lib/action\u controller/metal.rb:195:in'dispatch'
-actionpack(4.0.0.rc1)lib/action\u controller/metal/rack\u delegation.rb:13:in'dispatch'
-actionpack(4.0.0.rc1)lib/action_controller/metal.rb:231:in'block in action'
-actionpack(4.0.0.rc1)lib/action\u dispatch/routing/route\u set.rb:80:in'dispatch'
-actionpack(4.0.0.rc1)lib/action\u dispatch/routing/route\u set.rb:48:in'call'
-actionpack(4.0.0.rc1)lib/action\u dispatch/journe/router.rb:71:in'block in call'
-actionpack(4.0.0.rc1)lib/action\u dispatch/journe/router.rb:59:in'call'
-actionpack(4.0.0.rc1)lib/action_dispatch/routing/route_set.rb:654:in'call'
-request_store(1.0.5)lib/request_store/middleware.rb:9:in'call'
-典狱长(1.2.1)lib/warden/manager.rb:35:in'block in call'
-典狱长(1.2.1)lib/warden/manager.rb:34:in'call'
-机架(1.5.2)lib/rack/etag.rb:23:in'call'
-rack(1.5.2)lib/rack/conditionalget.rb:35:in'call'
-机架(1.5.2)lib/rack/head.rb:11:in'call'
-()home/timothythehuman/.rvm/gems/ruby-2.0.0-p0@whistlr/bundler/gems/remotipart-2d6e0949acc2/lib/remotipart/middleware.rb:30:in'call'
-actionpack(4.0.0.rc1)lib/action_dispatch/middleware/params_parser.rb:27:in'call'
-actionpack(4.0.0.rc1)lib/action\u dispatch/middleware/flash.rb:241:in'call'
-框架(1.5.2)lib/rack/session/abstract/id.rb:225:在“上下文”中
-机架(1.5.2)lib/rack/session/abstract/id.rb:220:in'call'
-actionpack(4.0.0.rc1)lib/action\u dispatch/middleware/cookies.rb:486:in'call'
-activerecord(4.0.0.rc1)lib/active\u record/query\u cache.rb:36:in'call'
-activerecord(4.0.0.rc1)lib/active\u record/connection\u adapters/abstract/connection\u pool.rb:626:in'call'
-activerecord(4.0.0.rc1)lib/active_record/migration.rb:366:in'call'
-actionpack(4.0.0.rc1)lib/action\u dispatch/middleware/callbacks.rb:29:in'block in call'
-activesupport(4.0.0.rc1)lib/active\u support/callbacks.rb:392:in`_run\u 405173532397223883\u callbacks'
-activesupport(4.0.0.rc1)lib/active\u support/callbacks.rb:80:in'run\u callbacks'
-actionpack(4.0.0.rc1)lib/action\u dispatch/middleware/callbacks.rb:27:in'call'
-actionpack(4.0.0.rc1)lib/action\u dispatch/middleware/reloader.rb:64:in`c