Irgendwas wird verschluckt

Hallo,

ich habe im controller eine ziemlich einfache Methode:

def update
@holding = Holding.find(params[:id])
load_lists
if @holding.update_attributes(params[:holding])
flash[:notice] = ‘Bestand erfolgreich aktualisiert.’
redirect_to :action => ‘show’, :id => @holding
else
render :action => ‘edit’
end
end

jedoch funktioniert sie nicht. es greift immer der else Fall, d.h. das
die
Edit-Maske wird nicht gerendert. (Ein Fehler in der Validierung müsste
demnach vorliegen)
Aber:

  • Es gibt keine Validierungsanweisungen im model
  • Ersetze ich update_attributes durch update_attributes! wird das Objekt
    gespeichert - jedoch würde ich gerne später benutzerfreundlich validieren.
  • <%= error_messages_for ‘holding’ %> gibt nichts aus
  • Das log sieht absolut “sauber” aus - kein SQL Fehler. (siehe unten).

Was läuft hier verkehrt?
Danke,
Alles Gute
Jan

Processing HoldingsController#update (for 127.0.0.1 at 2007-11-25
13:14:11)
[POST]
Session ID: 77e6c99dc50b7785e4f7dd80fbc18bd1
Parameters: {“commit”=>“Speichern”, “minimum_count”=>{“size4”=>“”},
[… sehr
viel…]
Holding Columns (0.001960) SHOW FIELDS FROM holdings
Holding Load (0.000913) SELECT * FROM holdings WHERE (holdings.id
= 1)
StatusType Load (0.000443) SELECT * FROM status_types ORDER BY name
StatusType Columns (0.001147) SHOW FIELDS FROM status_types
StorageLocation Load (0.000742) SELECT * FROM storage_locations
ORDER BY
place
StorageLocation Columns (0.001152) SHOW FIELDS FROM
storage_locations
Rendering actioneditlayoutfalse within layouts/application
Rendering holdings/edit
Rendered holdings/_form (0.00479)
Completed in 0.04020 (24 reqs/sec) | Rendering: 0.01059 (26%) | DB:
0.00636
(15%) | 200 OK [http://localhost/holdings/update/1]

Hallo,…

Am Sonntag, 25. November 2007 schrieb Jan L.:

else
  render :action => 'edit'
end

end

jedoch funktioniert sie nicht. es greift immer der else Fall, d.h. das die
Edit-Maske wird nicht gerendert.

kleiner Tippfehler: »d.h. die Edit-Maske wird immer gerendert«.

Alles Gute
Jan

ja hallo erstmal,…

Am Sonntag, 25. November 2007 schrieb Jan L.:

if @holding.update_attributes(params[:holding])

kleiner Tippfehler: »d.h. die Edit-Maske wird immer gerendert«.
Ich habe das ganze mal zurückverfolgt. Für mich sieht’s gerade aus, wie ein
ActiveRecord Bug, denn:
ruby script/console

h = Holding.new(:name=>“Testeintrag”)
=> #<Holding:0xb7102068
@attributes={“name”=>“Testeintrag”, “minimum_count”=>nil,
“status_type_id”=>nil, “inventarnummer”=>nil,
“storage_location_id”=>nil, “description”=>nil, “comment”=>nil,
“current_count”=>nil, “entry_date”=>nil, “parent_id”=>nil},
@new_record=true>

h.save
=> nil

Dabei fällt irgendwie in’s Auge:

  • Das Ding landet (verifiziert!) nicht in der Datenbank.
  • save gibt nicht false
    zurück.Validiere ich auf “name” vorhanden, so gibt dies Spiel:

h = Holding.new()
=> #<Holding:0xb712395c
@attributes={“name”=>"", “minimum_count”=>nil, “status_type_id”=>nil,
“inventarnummer”=>nil, “storage_location_id”=>nil, “description”=>nil,
“comment”=>nil, “current_count”=>nil, “entry_date”=>nil,
“parent_id”=>nil},
@new_record=true>

h.save
=> nil

h.save!
ActiveRecord::RecordInvalid: Validation failed: Name N.n angeben

from
/var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/validations.rb:764:in
`save_without_transactions!’

from
/var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/transactions.rb:133:in
`save!’

from
/var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/connection_adapters/abstract/database_statements.rb:59:in
`transaction’

from
/var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/transactions.rb:95:in
`transaction’

from
/var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/transactions.rb:121:in
`transaction’

from
/var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/transactions.rb:133:in
`save!’
from (irb):4

aber:

h = Holding.new(:name => “Testeintrag”)
=> #<Holding:0xb70d67d8
@attributes={“name”=>“Testeintrag”, “minimum_count”=>nil,
“status_type_id”=>nil, “inventarnummer”=>nil,
“storage_location_id”=>nil, “description”=>nil, “comment”=>nil,
“current_count”=>nil, “entry_date”=>nil, “parent_id”=>nil},
@new_record=true>

h.save
=> nil

h.save!
=> true

Das ganze sieht nicht gut aus.
Könnte das ein Bug in ActiveRecord sein?

Danke,
Alles Gute
Jan

ja hallo erstmal,…

Am Sonntag, 25. November 2007 schrieb Codeblogger:

Hallo Jan.

Hast Du vielleicht in der Datenbank einzelne Spalten auf “NOT NULL”
eingestellt?

Nur so 'ne Idee…

außer der ID nichts - aber selbst wenn: Irgendein SQL-müsste generiert
werden,
dass dann irgendwie auf die schnauze fällt.

Alles Gute
Jan

Hallo,

Am Sun, 25 Nov 2007 13:59:09 +0100 schrieb Jan L.
[email protected]:

Das ganze sieht nicht gut aus.
Könnte das ein Bug in ActiveRecord sein?

welche Plugins verwendest du? Welche Rails-Version? Kannst du uns
app/models/holding.rb zeigen?

Beste
GrüßeMoritz

ja hallo erstmal,…

Am Sonntag, 25. November 2007 schrieb Moritz H.:

Hallo,

Am Sun, 25 Nov 2007 13:59:09 +0100 schrieb Jan L.
[email protected]:

Das ganze sieht nicht gut aus.
Könnte das ein Bug in ActiveRecord sein?

welche Plugins verwendest du? Welche Rails-Version? Kannst du uns
app/models/holding.rb zeigen?

gerade hat man mir im irc geholfen - save ist einfach ein schlechter
Name
für einen attr_accessor im model.

Danke,
Alles Gute
Jan

Hallo Jan.

Hast Du vielleicht in der Datenbank einzelne Spalten auf “NOT NULL”
eingestellt?

Nur so 'ne Idee…

Grüße
Nicolai

gerade hat man mir im irc geholfen - save ist einfach ein schlechter Name
für
einen attr_accessor im model.

Allerdings!

Das ist wieder so ein Fall, wo wir besser den gesamten Code gehabt
hätten -
dann wäre es schneller aufgefallen. :wink:

Viel Erfolg noch!

Nicolai