Rails 3 - has_many через вложенную форму - PullRequest
5 голосов
/ 06 января 2011

Я пытаюсь использовать вложенную форму, но продолжаю получать эту ошибку при сохранении -

uninitialized constant User::Userplan

Вот мой код модели -

Пользователь

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

План

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

Форма

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

Я знаю, что использовать hidden_field_tag ​​неправильно, но я не уверен в лучшем способе

Спасибо за любую помощь!

activerecord (3.0.3) lib / active_record / association / association_proxy.rb: 260: в raise_on_type_mismatch' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in блок в замене 'activerecord (3.0.3) lib / active_record / association /association_collection.rb: 352: в each' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:352:in replace 'activerecord (3.0.3) lib / active_record / association.rb: 1524: в block in collection_accessor_methods' activerecord (3.0.3) lib/active_record/base.rb:1559:in блоке в атрибутах =' activerecord (3.0.3) lib / active_record / base.rb: 1555: в each' activerecord (3.0.3) lib/active_record/base.rb:1555:in attribute = 'cancan (1.4.1) lib / cancan / controller_resource.rb: 72: в 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: в 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: в block in add_before_filter' activesupport (3.0.3) lib/active_support/callbacks.rb:436:in run _3988671192319902872__process_action_ 982103756142273942 activesupport _callbacks (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 (3.0.3) lib / abstract_controller / callbacks.rb: 17: в process_action' actionpack (3.0.3) lib/action_controller/metal/instrumentation.rb:30:in блок в process_action '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 инструмент' 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 'actionpack (3.0.3) lib / abstract_controller / render.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 блоке в действии 'actionpack (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 рассылка' 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 в call 'mount-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: в 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: в блоке call' warden (1.0.2) lib/warden/manager.rb:35:in в call 'warden (1.0.2) lib / warden / manager.rb: 34: в 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: в call' actionpack (3.0.3) lib/action_dispatch/middleware/head.rb:14:in call 'rack (1.2.1) lib / rack / metadoverride.rb: 24: в 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: в 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: в call' activerecord (3.0.3) lib/active_record/query_cache.rb:32:in блоке в вызове' activerecord (3.0.3) lib / active_record / connection_adapters / abstract /query_cache.rb: 28: в 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 вызове' 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 (3.0.3) lib / action_dispatch / middleware / callbacks.rb: 44: в call' rack (1.2.1) lib/rack/sendfile.rb:107:in вызове пакет действий (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 call 'railties (3.0.3) lib / rails / rack / logger.rb: 13: в call' rack (1.2.1) lib/rack/runtime.rb:17:in call' activesupport (3.0.3) lib / active_support / cache / стратегии / local_cache.rb: 72:в 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 вызов 'rack (1.2.1) lib / rack / content_length.rb: 13: в 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: в 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: в блоке start_thread

1 Ответ

2 голосов
/ 06 января 2011

Я думаю, что ваша проблема с именами ваших ассоциаций. Так как ваша UserPlan модель имеет CamelCased <- вот так, Rails «табулирует» его имя в <code>: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, что именно вы пытаетесь сделать? Возможно, вам стоит открыть еще один вопрос?

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...