[英]Rails 3 - has_many through with nested form
I am trying to use a nested form but keep getting this error when saving - 我正在尝试使用嵌套表单,但在保存时不断收到此错误 -
uninitialized constant User::Userplan
Here is my model code - 这是我的型号代码 -
User 用户
class User < ActiveRecord::Base
has_many :userplans
has_many :plans, :through => :userplans
accepts_nested_attributes_for :userplans
UserPlan UserPlan
class UserPlan < ActiveRecord::Base
belongs_to :plan
belongs_to :user
Plan 计划
class Plan < ActiveRecord::Base
has_many :userplans
has_many :users, :through => :userplans
Form 形成
<%= form_for(@user) do |f| %>
<%= hidden_field_tag "user[userplans][plan_id]", 2 %>
<%= f.text_field :first_name %></p>
I know using a hidden_field_tag is wrong but im not sure of a better way 我知道使用hidden_field_tag是错误的,但我不确定更好的方法
Thanks for any help! 谢谢你的帮助!
activerecord (3.0.3) lib/active_record/associations/association_proxy.rb:260:in raise_on_type_mismatch' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in
block in replace' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in each' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in
replace' activerecord (3.0.3) lib/active_record/associations.rb:1524:in block in collection_accessor_methods' activerecord (3.0.3) lib/active_record/base.rb:1559:in
block in attributes=' activerecord (3.0.3) lib/active_record/base.rb:1555:in each' activerecord (3.0.3) lib/active_record/base.rb:1555:in
attributes=' cancan (1.4.1) lib/cancan/controller_resource.rb:72:in build_resource' cancan (1.4.1) lib/cancan/controller_resource.rb:48:in
load_resource_instance' cancan (1.4.1) lib/cancan/controller_resource.rb:30:in load_resource' cancan (1.4.1) lib/cancan/controller_resource.rb:24:in
load_and_authorize_resourc activerecord(3.0.3)lib / active_record / associations / association_proxy.rb:260:in
raise_on_type_mismatch' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in
block in replace'activerecord(3.0.3) lib / active_record / associations / association_collection.rb:352:在each' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in
替换'activerecord(3.0.3)lib / active_record / associations.rb: 1524:在block in collection_accessor_methods' activerecord (3.0.3) lib/active_record/base.rb:1559:in
中的block in collection_accessor_methods' activerecord (3.0.3) lib/active_record/base.rb:1559:in
在attributes ='activerecord(3.0.3) block in collection_accessor_methods' activerecord (3.0.3) lib/active_record/base.rb:1559:in
块中lib / active_record / base.rb:1555:在each' activerecord (3.0.3) lib/active_record/base.rb:1555:in
attributes ='cancan(1.4.1)lib / cancan / controller_resource.rb:72:in build_resource' cancan (1.4.1) lib/cancan/controller_resource.rb:48:in
load_resource_instance'cancan(1.4.1)lib / cancan / controller_resource.rb:30:in load_resource' cancan (1.4.1) lib/cancan/controller_resource.rb:24:in
load_and_authorize_resourc e' cancan (1.4.1) lib/cancan/controller_resource.rb:9:in block in add_before_filter' activesupport (3.0.3) lib/active_support/callbacks.rb:436:in
run _3988671192319902872__process_action_ 982103756142273942 _callbacks' activesupport (3.0.3) lib/active_support/callbacks.rb:409:in _run_process_action_callbacks' activesupport (3.0.3) lib/active_support/callbacks.rb:93:in
run_callbacks' actionpack (3.0.3) lib/abstract_controller/callbacks.rb:17:in process_action' actionpack (3.0.3) lib/action_controller/metal/instrumentation.rb:30:in
block in process_action' activesupport (3.0.3) lib/active_support/notifications.rb:52:in block in instrument' activesupport (3.0.3) lib/active_support/notifications/instrumenter.rb:21:in
instrument' activesupport (3.0.3) lib/active_support/notifications.rb:52:in instrument' actionpack (3.0.3) lib/action_controller/metal/instrumentation.rb:29:in
process_action' actionpack (3.0.3) lib/action_controller/metal/rescue.rb:17:in process_action' actionpack (3.0.3) lib/abstract_controller/base.rb:120:in
e'cancan(1.4.1)lib / cancan / controller_resource.rb:9:在
block in add_before_filter' activesupport (3.0.3) lib/active_support/callbacks.rb:436:in
中的block in add_before_filter' activesupport (3.0.3) lib/active_support/callbacks.rb:436:in
运行 _3988671192319902872__process_action_ 982103756142273942 _callbacks'activesupport(3.0.3 )lib / active_support / callbacks.rb:409:在_run_process_action_callbacks' activesupport (3.0.3) lib/active_support/callbacks.rb:93:in
run_callbacks'actionpack(3.0.3)lib / abstract_controller / callbacks.rb:17:in process_action' actionpack (3.0.3) lib/action_controller/metal/instrumentation.rb:30:in
process_action process_action' actionpack (3.0.3) lib/action_controller/metal/instrumentation.rb:30:in
块'activesupport(3.0.3)lib / active_support / notifications.rb:52: block in instrument' activesupport (3.0.3) lib/active_support/notifications/instrumenter.rb:21:in
中的block in instrument' activesupport (3.0.3) lib/active_support/notifications/instrumenter.rb:21:in
仪器'activesupport(3.0.3)lib / active_support / notifications.rb:52:在instrument' actionpack (3.0.3) lib/action_controller/metal/instrumentation.rb:29:in
process_action'actionpack(3.0.3)lib / action_controller / metal / rescue.rb:17:在process_action' actionpack (3.0.3) lib/abstract_controller/base.rb:120:in
process_action' actionpack (3.0.3) lib/abstract_controller/base.rb:120:in
process' actionpack (3.0.3) lib/abstract_controller/rendering.rb:40:in process' actionpack (3.0.3) lib/action_controller/metal.rb:138:in
dispatch' actionpack (3.0.3) lib/action_controller/metal/rack_delegation.rb:14:in dispatch' actionpack (3.0.3) lib/action_controller/metal.rb:178:in
block in action' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:62:in call' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:62:in
dispatch' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:27:in call' rack-mount (0.6.13) lib/rack/mount/route_set.rb:148:in
block in call' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:93:in block in recognize' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:75:in
optimized_each' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:92:in recognize' rack-mount (0.6.13) lib/rack/mount/route_set.rb:139:in
call' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:492:in call' warden (1.0.2) lib/warden/manager.rb:35:in
process_action' actionpack (3.0.3) lib/abstract_controller/base.rb:120:in
进程'actionpack(3.0.3)lib / abstract_controller / rendering.rb:40: process' actionpack (3.0.3) lib/action_controller/metal.rb:138:in
dispatch' actionpack(3.0.3)lib / action_controller / metal / rack_delegation.rb:14:在dispatch' actionpack (3.0.3) lib/action_controller/metal.rb:178:in
block in dispatch' actionpack (3.0.3) lib/action_controller/metal.rb:178:in
(3.0.3)lib / action_dispatch / routing / route_set.rb:62:在call' actionpack (3.0.3) lib/action_dispatch/routing/route_set.rb:62:in
dispatch'actionpack(3.0.3)lib / action_dispatch / routing / route_set.rb中: 27:在call' rack-mount (0.6.13) lib/rack/mount/route_set.rb:148:in
块中调用'rack-mount(0.6.13)lib / rack / mount / code_generation.rb:93:在block in recognize' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:75:in
optimized_each'rack-mount(0.6.13)lib / rack / mount / code_generation.rb:92:in recognize' rack-mount (0.6.13) lib/rack/mount/route_set.rb:139:in
调用'actionpack(3.0.3)lib / action_dispatch / routing / route_set.rb:492:在call' warden (1.0.2) lib/warden/manager.rb:35:in
call' warden (1.0.2) lib/warden/manager.rb:35:in
block in call' warden (1.0.2) lib/warden/manager.rb:34:in catch' warden (1.0.2) lib/warden/manager.rb:34:in
call' actionpack (3.0.3) lib/action_dispatch/middleware/best_standards_support.rb:17:in call' actionpack (3.0.3) lib/action_dispatch/middleware/head.rb:14:in
call' rack (1.2.1) lib/rack/methodoverride.rb:24:in call' actionpack (3.0.3) lib/action_dispatch/middleware/params_parser.rb:21:in
call' actionpack (3.0.3) lib/action_dispatch/middleware/flash.rb:182:in call' actionpack (3.0.3) lib/action_dispatch/middleware/session/abstract_store.rb:149:in
call' actionpack (3.0.3) lib/action_dispatch/middleware/cookies.rb:295:in call' activerecord (3.0.3) lib/active_record/query_cache.rb:32:in
block in call' activerecord (3.0.3) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in cache' activerecord (3.0.3) lib/active_record/query_cache.rb:12:in
cache' activerecord (3.0.3) lib/active_record/query_cache.rb:31:in call' activerecord (3.0.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:353:in
call' warden (1.0.2) lib/warden/manager.rb:35:in
in call'warden(1.0.2)lib / warden / manager.rb:34:in catch' warden (1.0.2) lib/warden/manager.rb:34:in
调用'actionpack(3.0.3)lib / action_dispatch / middleware / best_standards_support.rb:17:在call' actionpack (3.0.3) lib/action_dispatch/middleware/head.rb:14:in
(1.2) .1)lib / rack / methodoverride.rb:24:在call' actionpack (3.0.3) lib/action_dispatch/middleware/params_parser.rb:21:in
调用'actionpack(3.0.3)lib / action_dispatch / middleware / flash .rb:182:在call' actionpack (3.0.3) lib/action_dispatch/middleware/session/abstract_store.rb:149:in
调用'actionpack(3.0.3)lib / action_dispatch / middleware / cookies.rb:295:in call' activerecord (3.0.3) lib/active_record/query_cache.rb:32:in
block in call'activerecord(3.0.3)lib / active_record / connection_adapters / abstract / query_cache.rb:28:in cache' activerecord (3.0.3) lib/active_record/query_cache.rb:12:in
缓存'activerecord(3.0.3)lib / active_record / query_cache.rb:31:在call' activerecord (3.0.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:353:in
call' activerecord (3.0.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:353:in
call' actionpack (3.0.3) lib/action_dispatch/middleware/callbacks.rb:46:in block in call' activesupport (3.0.3) lib/active_support/callbacks.rb:415:in
_run_call_callbacks' actionpack (3.0.3) lib/action_dispatch/middleware/callbacks.rb:44:in call' rack (1.2.1) lib/rack/sendfile.rb:107:in
call' actionpack (3.0.3) lib/action_dispatch/middleware/remote_ip.rb:48:in call' actionpack (3.0.3) lib/action_dispatch/middleware/show_exceptions.rb:46:in
call' railties (3.0.3) lib/rails/rack/logger.rb:13:in call' rack (1.2.1) lib/rack/runtime.rb:17:in
call' activesupport (3.0.3) lib/active_support/cache/strategy/local_cache.rb:72:in call' rack (1.2.1) lib/rack/lock.rb:11:in
block in call' :10:in synchronize' rack (1.2.1) lib/rack/lock.rb:11:in
call' actionpack (3.0.3) lib/action_dispatch/middleware/static.rb:30:in call' railties (3.0.3) lib/rails/application.rb:168:in
call' railties (3.0.3) lib/rails/application.rb:77:in method_missing' railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in
call' activerecord (3.0.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:353:in
调用'actionpack(3.0.3)lib / action_dispatch / middleware / callbacks.rb:46: block in call' activesupport (3.0.3) lib/active_support/callbacks.rb:415:in
_run_call_callbacks'actionpack(3.0.3)lib / action_dispatch / middleware / callbacks.rb:44:在call' rack (1.2.1) lib/rack/sendfile.rb:107:in
调用'actionpack(3.0) .3)lib / action_dispatch / middleware / remote_ip.rb:48:在call' actionpack (3.0.3) lib/action_dispatch/middleware/show_exceptions.rb:46:in
调用'railties(3.0.3)lib / rails / rack /logger.rb:13:in call' rack (1.2.1) lib/rack/runtime.rb:17:in
call'activesupport(3.0.3)lib / active_support / cache / strategy / local_cache.rb:72:in call' rack (1.2.1) lib/rack/lock.rb:11:in
块中调用':10:在synchronize' rack (1.2.1) lib/rack/lock.rb:11:in
调用'actionpack( 3.0.3)lib / action_dispatch / middleware / static.rb:30:在call' railties (3.0.3) lib/rails/application.rb:168:in
调用'railties(3.0.3)lib / rails / application中。 rb:77:在method_missing' railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in
method_missing' railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in
call' rack (1.2.1) lib/rack/content_length.rb:13:in call' rack (1.2.1) lib/rack/handler/webrick.rb:52:in
service' /Users/joshcrowder/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:in service' /Users/joshcrowder/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in
run' /Users/joshcrowder/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' method_missing' railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in
(1.2.1)lib / rack / content_length.rb:13:in method_missing' railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in
call' rack (1.2.1) lib/rack/handler/webrick.rb:52:in
service' call' rack (1.2.1) lib/rack/handler/webrick.rb:52:in
service' /Users/joshcrowder/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in
run'/Users/joshcrowder/.rvm/rubies/ruby-1.9 .2-p0 / lib / ruby / 1.9.1 / webrick / server.rb:183:在`block in start_thread'中
I think your issue is with the naming of your associations. 我认为您的问题在于您的关联命名。 Since your
UserPlan
model is CamelCased <- like that, Rails 'tabelizes' the name of it into :user_plans
, not :userplan
. 由于你的
UserPlan
模型是CamelCased < - 就像那样,Rails'将它的名称:user_plans
,而不是:userplan
。 Your error, as you can see, stems from Rails not being able to find Userplan
, when it should be looking for UserPlan
. 正如您所看到的,您的错误源于Rails无法找到
Userplan
,何时应该查找UserPlan
。
User: 用户:
class User < ActiveRecord::Base
has_many :user_plans
has_many :plans, :through => :user_plans
accepts_nested_attributes_for :user_plans
Plan: 计划:
class Plan < ActiveRecord::Base
has_many :user_plans
has_many :users, :through => :user_plans
View: 视图:
<%= form_for(@user) do |f| %>
<%= hidden_field_tag "user[user_plans][plan_id]", 2 %>
<%= f.text_field :first_name %></p>
With regards to the hidden_field_tag
, what exactly are you trying to do? 关于
hidden_field_tag
,你究竟想做什么? Perhaps you should open another question? 也许你应该打开另一个问题?
Hope this helps! 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.