开发者

Weird behavior of Active Record (belongs_to)

I resolve this by adding goto_create_object.reload before iterator.


Here is the log: seems to use index and first get the different output. by the way, the field io_namespace is defined as:

belongs_to :io_namespace, :class_name => "IoNamespace", :foreign_key => "io_namespace"

(rdb:1) pp goto_create_object.io_fields[0]
ActiveRecord::AssociationTypeMismatch Exception: IoNamespace(#21601079开发者_JAVA百科80) expected, got String(#2148455420)
(rdb:1) pp goto_create_object.io_fields.first
 IoField io_uuid: "ac636fcc-ab80-11e0-8ef4-c82a14fffeca", io_active: false, io_application: nil, io_calculated: false, io_code: nil, io_created_by: "e6bf32c9-bdf0-33c8-8f4a-2390e174127d", io_created_on: "2011-07-11 13:43:15", io_datatype: "dc9a52a3-edbe-3937-9ef4-4bb24d076f77", io_deleted: false, io_description: nil, io_documentation: nil, io_folder: nil, io_icon: nil, io_identifier: "changed_to", io_indexed: false, io_localized: false, io_name: "Changed To", io_namespace: "97bc28f3-733f-3d26-8377-5718c4e2c544", io_notes: nil, io_owner: "e6bf32c9-bdf0-33c8-8f4a-2390e174127d", io_package: nil, io_private: false, io_related_object: nil, io_required: false, io_tags: nil, io_updated_by: nil, io_updated_on: nil>

it will give the correct value. how does that happen and how to solve it.

Here is the model:

class UUIDIORecord < UUIDRecord
  before_create :generate_default_fields

  #for namespace
  belongs_to :io_namespace, :class_name => "IoNamespace", :foreign_key => "io_namespace"

end

class IoObject < UUIDIORecord  
  set_table_name "io_object"

  #for fields
  has_many :rel_io_object_fields, :class_name => "RelIoObjectField", :foreign_key => "io_source_record", :inverse_of => :io_object, :dependent => :destroy
  has_many :io_fields, :class_name => "IoField", :through => :rel_io_object_fields, :dependent => :destroy

  #for relationship
  has_many :io_source_relationships, :class_name => "IoRelationShip", :foreign_key => "io_source_object", :inverse_of => :io_source_object, :dependent => :destroy

  # for primary name
  belongs_to :io_primary_name, :class_name => "IoField", :foreign_key => "io_primary_name"    
end

class IoField < UUIDIORecord
  set_table_name "io_field"

  #for object
  has_many :rel_io_object_fields, :class_name => "RelIoObjectField", :foreign_key => "io_target_record", :inverse_of => :io_field
  has_many :io_objects, :class_name => "IoObject", :through => :rel_io_object_fields

  #for datatype
  belongs_to :io_datatype, :class_name => "IoDataType", :foreign_key => "io_datatype"  

  # for relationship
  has_many :io_relationships, :class_name => "IoRelationShip", :foreign_key => "io_related_field"

  before_destroy :output_when_destroy
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜