Hi
I get a following error:
ActiveRecord::AssociationTypeMismatch in Cmdb#create
ConfigurationItemAttributeValue expected, got Array
RAILS_ROOT: ./script/…/config/…
Application Trace | Framework Trace | Full Trace
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/associations/association_collection.rb:128:in
raise_on_type_mismatch' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/associations/association_collection.rb:114:in
replace’
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/associations/association_collection.rb:114:in
each' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/associations/association_collection.rb:114:in
replace’
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/associations.rb:770:in
attributes=' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/associations.rb:762:in
attributes=’
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/base.rb:1188:in
initialize_without_callbacks' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/callbacks.rb:236:in
initialize’
#{RAILS_ROOT}/app/controllers/cmdb_controller.rb:24:in new' #{RAILS_ROOT}/app/controllers/cmdb_controller.rb:24:in
create’
=============== Controller =================
def create
@ci = ConfigurationItem.new(params[:ci])
if(params[:attribute_id])
params[:attribute_id].each_pair{ |attr_id, |attr_value_id|
attribute = ConfigurationItemAttributeValue.new
attribute.attribute_id= attr_id
attribute.value_id= attr_value_id
@ci.attributes << attribute
}
end
if(params[:attribute_value])
params[:attribute_value].each_pair{ |attr_id, |attr_value|
attribute = ConfigurationItemAttributeValue.new
attribute.attribute_id= attr_id
attribute.value= attr_value
@ci.attributes << attribute
}
end
if @ci.save
flash[:notice] = "Configuration Item `#{@ci.name}` was successfully
created."
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end
===============
The line that should work is @ci.attributes << attribute
attribute is a ConfigurationItemAttributeValue.new, so it is NOT an
array. What am I doing wrong? (the associations are set correctly, I
suppose)
ConfigurationItem: has_many :attributes, :class_name =>
‘ConfigurationItemAttributeValue’
ConfigurationItemAttributeValue: belongs_to :configuration_item