Çalıştığım şey, bazı model nesneleri veritabanından almak ve bunları xml'ye serileştirmektir, ancak belirli bir (has_many) ilişkilendirmeyi eklerken aşağıdaki hatayı alıyorum. JSON serileştirme (to_json) bir sorun olmadan çalışır (özellikleri de dahil). Ayrıca bir nesnenin serileştirilmesi (XML ve JSON). Sorun ne olabilir? (Model sınıfı herhangi bir XML serileştirme işlemini geçersiz kılmaz, Rails 3 kullanıyorum). İşteNoMethodError, to_xml serileştirirken
komut:
Entity.all.to_xml :include => :properties
ve dökümü:
NoMethodError: undefined method `macro' for nil:NilClass from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/whiny_nil.rb:48:in `method_missing' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serialization.rb:41:in `serializable_add_includes' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serialization.rb:40:in `each' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serialization.rb:40:in `serializable_add_includes' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serializers/xml_serializer.rb:191:in `send' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serializers/xml_serializer.rb:191:in `add_includes' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serializers/xml_serializer.rb:186:in `add_extra_behavior' from /home/kai/.rvm/gems/[email protected]/gems/activemodel-3.0.1/lib/active_model/serializers/xml.rb:103:in `serialize' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `call' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `_nested_structures' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:58:in `method_missing' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:31:in `tag!' from /home/kai/.rvm/gems/[email protected]/gems/activemodel-3.0.1/lib/active_model/serializers/xml.rb:101:in `serialize' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serializers/xml_serializer.rb:175:in `to_xml' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/associations/association_proxy.rb:218:in `send' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/associations/association_proxy.rb:218:in `method_missing' ... 5 levels... from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `call' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `_nested_structures' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:58:in `method_missing' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:31:in `tag!' from /home/kai/.rvm/gems/[email protected]/gems/activemodel-3.0.1/lib/active_model/serializers/xml.rb:101:in `serialize' from /home/kai/.rvm/gems/[email protected]/gems/activerecord-3.0.1/lib/active_record/serializers/xml_serializer.rb:175:in `to_xml' from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/xml_mini.rb:107:in `to_tag' from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/core_ext/array/conversions.rb:159:in `to_xml' from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/core_ext/array/conversions.rb:159:in `each' from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/core_ext/array/conversions.rb:159:in `to_xml' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `call' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `_nested_structures' from /home/kai/.rvm/gems/[email protected]/gems/builder-2.1.2/lib/builder/xmlbase.rb:58:in `method_missing' from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/core_ext/array/conversions.rb:158:in `__send__' from /home/kai/.rvm/gems/[email protected]/gems/activesupport-3.0.1/lib/active_support/core_ext/array/conversions.rb:158:in `to_xml'
Update ve çözüm
HoBlend haklıydı ... Varlık modelinde derneklerin biri değildi doğru ayarlanmış, ancak properties
bir tane. ,
Eğer ActiveRecord dernekler ile çalışmaya kullanılırsa belongs_to :created_by, :class_name => "User", :foreign_key => "created_by"
Eğer :foreign_key
parametre burada geçerli olmadığını bakın (Bu dernek diğer tarafta olmalıdır:
varlıkta da kullanıcı modeli için bağ olabileceğini Ayrıca nerede idi). Raylar bu parametre hakkında asla şikayet etmedi ve testlerim geçti. Ancak XML serileştirme bir şekilde başarısız oldu (şaşırtıcı bir şekilde JSON serileştirmesi değil). güncelleme
ait
Güncelleme Bir böcek ActiveRecord yerde var gibi görünüyor. Aşağıdaki modeller düşünün:
class User < ActiveRecord::Base
has_many :created_entities, :class_name => "Entity", :foreign_key => "created_by"
end
class Entity < ActiveRecord::Base
belongs_to :created_by, :class_name => "User", :foreign_key => "created_by"
end
A created_by
tamsayı alanı Varlık göç mevcuttur. Görünüşe göre, ait_dosyası ile aynı ismi girin: foreign_key, sonra XML serileştirme bozulur. belongs_to :creator, :class_name => "User", :foreign_key => "created_by"
olarak değiştirdiğimde seri hale getirme beklendiği gibi çalışır.
Bu zaten Raylar 3.0.3 çözülmüştür
güncelleme ;-) ait güncelleme Güncelleme (ve 3.0.1 vardı). Öyleyse ne öğreniyorum ... yazılımı ilk olarak güncelle!
Evet, öyle. Daha önce de belirttiğim gibi, aynı veritabanında aynı komut kullanılır, ancak sadece to_json ile çalışır (tüm özellikler doğru şekilde json'a serileştirilir). – Zardoz
Çözüldü (yukarıdaki düzenlemeye bakın) ... ve sizin için bazı puanlar :-) – Zardoz