Rails 3 - has_many via nested form

I am trying to use a nested form, but keep 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

class UserPlan < ActiveRecord::Base
 belongs_to :plan
 belongs_to :user

Plan

class Plan < ActiveRecord::Base
 has_many :userplans
 has_many :users, :through => :userplans

The form

<%= form_for(@user) do |f| %>
 <%= hidden_field_tag "user[userplans][plan_id]", 2 %>
 <%= f.text_field :first_name %></p>

I know that using hidden_field_tag ​​is wrong, but I'm not sure about the best way

Thanks for any help!

activerecord (3.0.3) lib/active_record/association/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/association/association_collection.rb: 352: in each' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in ' activerecord (3.0.3) lib/active_record/association.rb: 1524: in block in collection_accessor_methods' activerecord (3.0.3) lib/active_record/base.rb:1559:in block = ' 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_resource ' 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 ' 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 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 ' 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 ' (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 ' (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 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 ' 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 ' 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 ' /Users/joshcrowder/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread '

+5
1

, . UserPlan - CamelCased < - , Rails "" :user_plans, :userplan. , , , Rails UserPlan, UserPlan.

:

class User < ActiveRecord::Base 
  has_many :user_plans
  has_many :plans, :through => :user_plans
  accepts_nested_attributes_for :user_plans

:

class Plan < ActiveRecord::Base
  has_many :user_plans
  has_many :users, :through => :user_plans

:

<%= form_for(@user) do |f| %>
 <%= hidden_field_tag "user[user_plans][plan_id]", 2 %>
 <%= f.text_field :first_name %></p>

hidden_field_tag, ? , ?

, !

+2

All Articles