ruby on rails - Object expected, got ActiveSupport::HashWithIndifferentAccess Nested form -
i getting error haven't seen before, have tried solutions similar questions here, trying select council tenant lives pre-populated council model, using through council history, form shows when press submit keep getting error. appreciate problem.
started put "/properties/6/build/council" 127.0.0.1 @ 2013-08-18 22:32:55 +0100 processing properties::buildcontroller#update html parameters: {"utf8"=>"✓", "authenticity_token"=>"wbwqaxtbioqzglkhurstqs+cfd/xveutxnj0jwntsa0=", "property"=> {"council_history"=>{"id"=>"1"}}, "commit"=>"save property[council history]", "property_id"=>"6", "id"=>"council"} property load (0.3ms) select "properties".* "properties" "properties"."id" = ? limit 1 [["id", "6"]] (0.1ms) begin transaction ( 0.1ms) rollback transaction completed 500 internal server error in 62ms activerecord::associationtypemismatch - councilhistory(#70308444526760) expected, got activesupport::hashwithindifferentaccess(#70308443935640): activerecord (3.2.13) lib/active_record/associations/association.rb:204:in `raise_on_type_mismatch' activerecord (3.2.13) lib/active_record/associations/has_one_association.rb:8:in `replace' activerecord (3.2.13) lib/active_record/associations/singular_association.rb:17:in `writer' activerecord (3.2.13) lib/active_record/associations/builder/association.rb:51:in `block in define_writers' activerecord (3.2.13) lib/active_record/attribute_assignment.rb:94:in `block in assign_attributes' activerecord (3.2.13) lib/active_record/attribute_assignment.rb:93:in `assign_attributes' activerecord (3.2.13) lib/active_record/persistence.rb:216:in `block in update_attributes' activerecord (3.2.13) lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status' activerecord (3.2.13) lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' activerecord (3.2.13) lib/active_record/transactions.rb:208:in `transaction' activerecord (3.2.13) lib/active_record/transactions.rb:311:in `with_transaction_returning_status' activerecord (3.2.13) lib/active_record/persistence.rb:215:in `update_attributes' app/controllers/properties/build_controller.rb:23:in `update'
property model
class property < activerecord::base attr_accessible :name, :address_attributes, :tenants_attributes, :meter_attributes, :council_history, :council_history_attributes, :property_id, :council_id, :status belongs_to :user has_one :council_history accepts_nested_attributes_for :council_history has_one :council, through: :council_history accepts_nested_attributes_for :council end
council model
class council < activerecord::base attr_accessible :councilemail, :name, :counciltel has_many :council_history has_many :properties, :through => :council_history end
council history model
class councilhistory < activerecord::base attr_accessible :council_id, :property_id, :vacant belongs_to :council belongs_to :property end
select council view form
<h1>select council</h1> <%= simple_form_for @property, :url => url_for(:action => 'update', :controller => 'properties/build'), :method => 'put' |f| %> <%= f.simple_fields_for :council_history |builder| %> <%= builder.input :id, :collection => council.all %> <%= builder.submit %> <% end %> <% end %>
build property controller
class properties::buildcontroller < applicationcontroller include wicked::wizard steps :tenant, :meter, :council, :confirmed def show @property = property.find(params[:property_id]) @tenants = @property.tenants.new(params[:tenant_id]) @meter = @property.build_meter @council = @property.build_council_history render_wizard end def edit @property = property.find(params[:property_id]) end def update @property = property.find(params[:property_id]) params[:property][:status] = step.to_s params[:property][:status] = 'active' if step == steps.last @property.update_attributes(params[:property]) render_wizard @property end end
in property
model have attr_accessible :council_history
, try removing it.
i didn't test believe problem because have has_one :council_history
, simple_fields_for
using :council_history
instead of generating council_history_attributes
parameters.