Liebe Ruby on Railer,
ich habe ein komisches Problem - weiß gerade garnicht, wie ich es
schildern
soll, aber vielleicht klingelt es ja doch bei einem von Euch und Ihr
habt
einen schnellen Tipp für mich.
Ich habe folgendes Datenmodell:
Order has_one Lastschrift
Sowohl in meinen Functional Tests und über script/console kann ich auch
so
etwas sagen wie:
o = Order.new
l = Lastschrift.new
o.lastschrift = l
o.save
Das spricht für mich dafür, dass ich an dieser Stelle alles richtig
gemacht
habe.
Im “richtigen” Code habe ich nun eine Order “order”.
order.lastschrift = Lastschrift.new
schlägt fehl:
NoMethodError in StoreController#adresse
You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.klass
RAILS_ROOT: script/…/config/…
Application Trace http://localhost:3000/store/adresse# | Framework
Tracehttp://localhost:3000/store/adresse#| Full
Trace http://localhost:3000/store/adresse#
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:147:in
raise_on_type_mismatch' vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:44:in
replace’
vendor/rails/activerecord/lib/active_record/associations.rb:908:in
lastschrift=' app/controllers/store_controller.rb:113:in
adresse’
Ich habe in die Active Record Klasse association_proxy.rb geschaut, hier
ist
folgender Code:
def raise_on_type_mismatch(record)
unless record.is_a?(@reflection.klass)
raise ActiveRecord::AssociationTypeMismatch, "#{@
reflection.class_name} expected, got #{record.class}"
end
end
Dort ist die Variable @reflection nil.
Um das ganze noch etwas unverständlicher zu machen, musste ich
feststellen,
dass auch ein order.to_yaml einen Fehler produziert:
TypeError in StoreController#adresse
wrong argument type nil (expected Data)
RAILS_ROOT: script/…/config/…
Application Trace http://localhost:3000/store/adresse# | Framework
Tracehttp://localhost:3000/store/adresse#| Full
Trace http://localhost:3000/store/adresse#
/usr/local/lib/ruby/1.8/yaml.rb:387:in emit' /usr/local/lib/ruby/1.8/yaml.rb:387:in
quick_emit’
/usr/local/lib/ruby/1.8/yaml/rubytypes.rb:15:in to_yaml' app/controllers/store_controller.rb:112:in
adresse’
Das Verhalten ist reproduzierbar (auch nach Neustart von WEBrick und
löschen
der Session-Daten).
Ich benutze folgende Version von Rails etc.:
Ruby version 1.8.5 (i686-darwin8.8.2)
RubyGems version 0.9.4
Rails version 1.2.5
Active Record version 1.15.5
Action Pack version 1.13.5
Action Web Service version 1.2.5
Action Mailer version 1.3.5
Active Support version 1.4.4
Environment development
Database adapter mysql
Database schema version 8
Also, falls jemand ein ähnliches Problem hat oder eine Idee, ich bin für
Hinweise sehr dankbar!
Schöne Grüße,
Björn